Android分发事件的学习

作者: 黑狗狗哥 | 来源:发表于2017-04-16 14:37 被阅读99次

Android事件构成(顺序):

ACTION_DOWN:按下
ACTION_MOVE:移动
ACTION_UP:抬起

Android事件回调方法:

View,Activity:

dispatchTouchEvent(MotionEvent ev)
onTouchEvent(MotionEvent ev)

ViewGroup:

dispatchTouchEvent(MotionEvent ev)
onTouchEvent(MotionEvent ev)
onInterceptTouchEvent(MotionEvent ev)

下面是盗图:


Android.png

总结下三个方法的事件回调方法(因为ViewGroup extends View,所以这里的View即可以是View也可以是ViewGroup):

dispatchTouchEvent(MotionEvent ev)

{
return true:
代表当前View进行了消费了,停止向下传递(既子View收不到touchEvent了)。
return false:
{
1、如果这个事件是Activity传递过来的,则返回给Activity的onTouchEvent(MotionEvent ev)进行消费。
2、如果这个事件是父View传递过来的,则返回给父View的onTouchEvent(MotionEvent ev)进行消费。
}
return super.dispatchTouchEvent(MotionEvent ev):
代表分发给当前View的onInterceptTouchEvent(MotionEvent ev)处理,如果当前View 不存在onInterceptTouchEvent(MotionEvent ev)方法(既这个View不是ViewGroup),
则传递给当前的onTouchEvent(MotionEvent ev)进行消费
}

onInterceptTouchEvent(MotionEvent ev)

{
return true:
由当前的onTouchEvent(MotionEvent ev)进行消费。
return false:
由当前的View传递给子View的dispatchTouchEvent(MotionEvent ev)方法进行事件分发,
如果不存在子View,则由当前View的onTouchEvent(MotionEvent ev)进行消费
return super.onInterceptTouchEvent(MotionEvent ev):
与return false一样。
}

onTouchEvent(MotionEvent ev)

{

return true:
代表当前View消费了当前事件,则停止了事件的传递
return false:
代表由当前的View向上传递,由上层(可以是父View也可以是Activity)onTouchEvent(MotionEvent ev)接受,并且当前View收不到下一次事件的回调(比如,当前View可以接受到ACTION_DOWN事件的回调,当由于onTouchEvent(MotionEvent ev)返回false,因此当前View不会接受到ACTION_MOVE和ACTION_UP)
return super.onTouchEvent(MotionEvent ev):
与return false一样。
}

相关文章

网友评论

    本文标题:Android分发事件的学习

    本文链接:https://www.haomeiwen.com/subject/lgeaattx.html