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传递事件。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容