歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中的View與ViewGroup繪制過程,手勢監聽順序與使用

一 View ,ViewGroup的繪制過程

ViewGroup繪制包括兩個步驟:1.measure 2.layout

在兩個步驟中分別調用回調函數:1.onMeasure()   2.onLayout()

1.onMeasure() 在這個函數中,ViewGroup會接受childView的請求的大小,然後通過childView的measure(newWidthMeasureSpec, heightMeasureSpec)函數存儲到childView中,以便childView的getMeasuredWidth() andgetMeasuredHeight() 的值可以被後續工作得到。

2.onLayout() 在這個函數中,ViewGroup會拿到childView的getMeasuredWidth() andgetMeasuredHeight(),用來布局所有的childView。

3.View.MeasureSpec與 LayoutParams 這兩個類,是ViewGroup與childView協商大小用的。其中,View.MeasureSpec是ViewGroup用來部署childView用的, LayoutParams是childView告訴ViewGroup 我需要多大的地方。

4.在View 的onMeasure的最後要調用setMeasuredDimension()這個方法存儲View的大小,這個方法決定了當前View的大小。

具體詳見Android官方文檔 dev guide->User Interface->How Android Draws Views

二 View,ViewGroup的手勢監聽順序與使用

View的手勢監聽相關回調函數:onTouchEvent()

ViewGroup的手勢監聽相關回調函數:onTouchEvent(),onInterceptTouchEvent()

1.這兩個回調函數都會返回一個boolean變量,表示是否消費了此手勢。如果消費了,返回true,如果未消費,返回false。

2.當用戶觸摸一下屏幕,產生手勢MotionEvent,

ViewGroup的onInterceptTouchEvent()會接受此MotionEvent。

如果此回調函數返回true,則表示此ViewGroup消費了此手勢,不想再讓他的childView去處理,childView的onTouchEvent()便不會再接受此手勢,同時此ViewGroup的onTouchEvent()會接受此手勢。

如果此回調函數返回false,則表示此ViewGroup未消費了此手勢,想讓他的childView去處理,childView的onTouchEvent()接受此手勢,同時此ViewGroup的onTouchEvent()不會接受此手勢。

Copyright © Linux教程網 All Rights Reserved