一、事件分发注意基本点:

1、我们触摸手机屏幕主要三种事件类型进行分析,
     (1)ACTION_DOWN 
     (2)ACTION_UP
     (3)ACTION_MOVE
2、我们要清楚,View和ViewGroup事件分发,是从Activity--->ViewGroup--->View;
3、事件消费是从View--->ViewGroup--->Activity;
4、只有ViewGroup有事件拦截方法,onInterceptOnTouchEvent方法;

二、Activity、ViewGroup、View事件传递方法的异同点

1、Activity、ViewGroup、View的dispatchTouchEvent在return super的时候才会分发到下一步;
2、Activity、ViewGroup、View的dispatchTouchEvent在return true的时候不会分发到下一步,且自己消费;
3、特别注意Activity的dispatchTouchEvent在return false的时候不会分发到下一步,且自己消费;
4、ViewGroup、View的dispatchTouchEvent在return false的时候不会分发到下一步,而是将事件返回给上一级的onTouchEvent消费;
5、ViewGroup的onInterceptOnTouchEvent在return true时, 会将事件拦截并传递给自己的onTouchEvent去消费;
6、ViewGroup的onInterceptOnTouchEvent在return false、super时, 会将事件传递给下一级;
7、ViewGroup、View的onTouchEvent在return false、super时,都会将消费事件返回给上一级去消费;
8、Activity、ViewGroup、View的onTouchEvent在return true,都会消费掉本次事件

如图所示:

【Android】View、ViewGroup事件分发
 

三、总结

1、当ACTION_DOWN    Activity、ViewGroup、View没有被消费,那么ACTION_MOVE 、ACTION_UP 不会被分发下一级;
2、当事件被消费,事件就不会再被传递,且ACTION_MOVE 、ACTION_UP 不会被分发下一级;
3、当事件被拦截,事件也不会再向下被分发,且ACTION_MOVE 、ACTION_UP 不会被分发下一级;
4、当事件分发返回true也不会再分发,且被分发方法自己消费
 

相关文章: