View的绘制事件传递过程
Posted CoderAndy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了View的绘制事件传递过程相关的知识,希望对你有一定的参考价值。
View绘制过程
- onMeasure()
- onLayout()
- onDraw()
过程详解
onMeasure()
计算尺寸
onLayout()
为viewGroup类型布局子视图用的。
onDraw()
执行绘制图形动作。
View事件传递
Touch事件封装在MotionEvent对象中,其中包括touch的位置、时间、历史记录以及第几个手指触摸(多点触摸)等。
Touch事件分为:
ACTION_DOWN,
ACTION_UP,
ACTION_MOVE,
ACTION_POINTER_DOWN,
ACTION_POINTER_UP,
ACTION_CANCEL。
(每个触摸事件都是以ACTION_UP开始,ACTION_DOWN结束)
事件处理包括:
传递,dispatchTouchEvent()函数;
拦截,onInterceptTouchEvent()函数;
消费onTouchEvent()函数和onTouchListener。
传递过程:
- 事件从Activity.dispatchTouchEvent()开始传递,从最上层的View(ViewGroup)开始一直往下传递。
- 如果事件从上往下传递过程中被onInterceptTouchEvent做了拦截,那么将不会再次往下传递。
- 如果在向下传递的过程中,一直没有被停止,最底层View也没有消费事件,事件会往上传传递,此时父View可以消费该Touch事件,如果一直没有被消费,会传递到Activity的onTouchEvent。
- 如果View没有对ACTION_DOWN进行消费,之后的其他事件也不会传递过来。
onTouchListener优先于onTouchEvent()对事件进行消费。
以上是关于View的绘制事件传递过程的主要内容,如果未能解决你的问题,请参考以下文章