android 界面绘制 事件分发

Activity的绘制流程在onResume之后开始,切入点是ViewRootImpl类的performTraversals方法

View的绘制流程是measure,layout,draw

ViewGroup在绘制过程中会先遍历子View然后才会绘制自身,例如先遍历measure子View,然后再计算出自身的尺寸。

measure 测量大小 SpecMode分为三种 EXACTLY AT_MOST UNSPECIFIED

layout 在父布局中的位置

draw 绘制 invalidate() postInvalidate() postInvalidateDelayed(long delayMilliseconds) 这三个方法都有一个重载版本,接受(int l, int t, int r, int b)这么一组参数 -- 部分重绘

image.png

ndroid事件分发机制

三个重要角色

1、Activity:接收Down点击事件,传递给Phonewindow和DecorView

2、ViewGroup:拦截事件,或者继续传递给子View

3、View:决定消费这个事件或者不消费从而返回给上一级

三个核心事件

1、dispatchTouchEvent():分发点击事件,return false 事件停止往子View传递和分发 触发自身 onTouchEvent

2、onTouchEvent() : return false 是不消费事件,并让事件往父控件的方向从下往上流动。return true 是消费事件。

3、onInterceptTouchEvent():拦截点击事件, return false 不拦截,允许事件向子View传递, return true拦截事件,不在向子View传递事件。

你可能感兴趣的:(android 界面绘制 事件分发)