Android点击事件和滑动冲突解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android点击事件和滑动冲突解决相关的知识,希望对你有一定的参考价值。

参考技术A 对于一个根ViewGroup来说,发生点击事件首先调用dispatchTouchEvent
如果这个ViewGroup的onIterceptTouchEvent返回true就表示它要拦截当前事件,接着这个ViewGroup的onTouchEvent就会被调用.如果onIterceptTouchEvent返回false,那么就会继续向下调用子View的dispatchTouchEvent方法,其实整体来说就是个责任链的模式,一层一层的进行分发,当某一层能处理的时候,事件消费结束,当任何一层都不处理的时候,事件返回到最上层。

当一个View需要处理事件的时候,如果它没有设置onTouchListener,那么直接调用onTouchEvent.如果设置了Listenter 那么就要看Listener的onTouch方法返回值.为true就不调,为false就调onTouchEvent。onTouchListener中的onTouch方法每次都会先于view本身的onTouchEvent调用,且有优先消费权

View的默认实现会在onTouchEvent里面把touch事件解析成Click之类的事件

点击事件传递顺序 Activity -> Window -> View

一旦一个元素拦截了某事件,那么一个事件序列里面后续的Move,Down事件都会交给它处理.并且它的onInterceptTouchEvent不会再调用

View的onTouchEvent默认都会消耗事件,除非它的clickable和longClickable都是false(不可点击),但是enable属性不会影响

外部调用一般是在外部的onInterceptTouchEvent的方法里,一般也是在move里判断具体的滑动是否需要拦截,如果符合我们外部控件的需求则返回true拦截,如果不符合则返回false不拦截,传递给子控件。两种方式其实原理都是一样就是在move里去根据x和y的一个滑动距离来判断具体将这次滑动事件交给谁去处理。

Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突

1、当Viewpager滑动到第一页的时候,将Viewpager的右滑禁止掉,这种可以保证DrawerLayout顺利的滑出
2、当DrawerLayout滑出的时候,监听DrawerLayout的滑动事件,滑出完全禁止掉ViewPager的滑动,
当DrawerLayout关闭的时候充值启动ViewPager的滑动
参考技术A 1、当Viewpager滑动到第一页的时候,将Viewpager的右滑禁止掉,这种可以保证DrawerLayout顺利的滑出
2、当DrawerLayout滑出的时候,监听DrawerLayout的滑动事件,滑出完全禁止掉ViewPager的滑动,
当DrawerLayout关闭的时候充值启动ViewPager的滑动

以上是关于Android点击事件和滑动冲突解决的主要内容,如果未能解决你的问题,请参考以下文章

Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突

Android——滑动事件冲突解决

Webview&Viewpager滑动冲突解决方案

Android 滑动冲突以及如何解决

android-----滑动冲突解决案例

一文解决Android View滑动冲突