View的绘制事件传递过程

Posted CoderAndy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了View的绘制事件传递过程相关的知识,希望对你有一定的参考价值。

View绘制过程

  1.   onMeasure()
  2.   onLayout()
  3.   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的绘制事件传递过程的主要内容,如果未能解决你的问题,请参考以下文章

Android的事件分发

View绘制详解,扒一扒View的测量过程

Android事件分发机制详解

Android 自定义 View 详解

Android的事件分发

Android绘制源码分析(下)