Android事件拦截处理机制理解:

Android事件拦截处理机制理解:

1. onInterceptTouchEvent负责对touch事件进行拦截,由父视图向子视图传递,在都没有拦截的情况下,会流到最深的子视图;如果在某个子视图中拦截成功了(返回true时),那么紧接着的就是对事件的处理,也就是交给onTouchEvent方法进行事件处理,当onTouchEvent方法返回true则表示全权处理该事件,返回false则表示该方法处理不了当前事件,需要把事件交到上级父视图的onTouchEvent方法进行处理,以此类推

2. 如果所有视图的onInterceptTouchEvent方法和onTouchEvent方法返回都是false,方法执行的顺序为:

A.onInterceptTouchEvent--->B.onInterceptTouchEvent--->C.onInterceptTouchEvent--->D.onInterceptTouchEvent--->D.touchEvent

--->C.touchEvent--->B.touchEvent--->A.touchEvent.

总结:

1. 拦截事件由父视图优先执行,处理事件由子视图优先执行

2. 如果视图事件都没有拦截,都没有处理,那么只能由最顶级父视图处理

附上示图:

Android事件拦截处理机制理解:_第1张图片Android事件拦截处理机制理解:_第2张图片

下面是事件流程图:

Android事件拦截处理机制理解:_第3张图片

 Android事件拦截处理机制理解:_第4张图片

Android事件拦截处理机制理解:_第5张图片

Android事件拦截处理机制理解:_第6张图片

 Android事件拦截处理机制理解:_第7张图片

-----------------------

 

Layout对象getX( )是获取视图的位置,MotionEvent ev事件中,ev.getX( )获取屏幕的坐标位置

 

关于事件溜走问题:

onTouchEvent返回true,在当前处理;返回false事件容易溜走,被别的层级拦截。ACTION_MOVE 和 ACTION_UP是事件消费的方法

 

事件中,Fragment拦截了焦点的流动,通过接口间接处理

 

你可能感兴趣的:(android开发,android)