说到事件传递大家既熟悉又陌生,因为随着智能手机的普及,现在每天我们都在做着这样的事情,点击一个登录button跳转到登录成功界面,点击支付button。。。。
说到陌生呢因为内部到底发生了什么事情呢,可能有些同学并不清楚。接下来我们简单说一下具体的流程,然后给大家举一个栗子。
点击一下屏幕,事件会从activity传递到顶层的ViewGroup,然后ViewGroup再传递给他子View,
简单的布局,一个activity 里边有个LinearLayout LinearLayout里有个textview,然后点击textview一下,事件的传递
1.png这是简单的第一个点击,没有移动的情况,打印结果如下:
FreshActivity--------------------dispatchTouchEvent----MotionEvent { action=ACTION_DOWN
TouchViewLinearLayout---------dispatchTouchEvent----MotionEvent { action=ACTION_DOWN
TouchViewLinearLayout---------onInterceptTouchEvent----MotionEvent { action=ACTION_DOWN
TouchTextView------------------dispatchTouchEvent----MotionEvent { action=ACTION_DOWN
TouchTextView------------------onTouchEvent----MotionEvent { action=ACTION_DOWN
TouchViewLinearLayout---------onTouchEvent----MotionEvent { action=ACTION_DOWN
FreshActivity--------------------onTouchEvent----MotionEvent { action=ACTION_DOWN
FreshActivity--------------------dispatchTouchEvent----MotionEvent { action=ACTION_UP
FreshActivity--------------------onTouchEvent----MotionEvent { action=ACTION_UP
通过打印可以发现,事件由activity 传递到ViewGroup 然后再由ViewGroup传递到view最后传回到view。这是在各层都没有拦截的情况下(默认情况)。这是actionDown,然后actionUp的时候因为是知道是默认情况,所以直接交给activity处理(如果不是默认情况,也是交给处理的view处理。)着就是一个u型的事件传递流程。
网友评论