ScrollView嵌套导致onTouch中的ACTION_UP丢失的问题解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014736095/article/details/48050309

首先感谢@浅秋这篇文章(http://blog.csdn.net/hyp712/article/details/8777835#comments)让我简单的理解了onTouch事件的分发机制。

即使没有直接解决我的问题,但是也受到了一点启发。好,下面转入正题:

onTouch 中的ACTION_UP丢失的问题解决

问题出现:为了满足需求,在代码中使用了Scrollview,里面嵌套了一个HorizontalScrollView,需要对屏幕边缘来一个侧滑,所以必须要监听HorizontalScrollView的一个onTouch事件,后来发现,可以监听,但是与外层的ScrollView有冲突,出现了一个问题:

如果水平滑动的时候稍微有点倾斜,那么就直接调用了ScrollView的onTouch,不调用HorizontalScrollView的onTouch方法了,看了上面的文章,如果不希望把事件传到父控件,那么就在onTouch中返回true。但是对于我这种情况却是“然并卵”。

解决方案:

从上面的文章可以看出,其实onTouch事件并不只是ACTION_DOWN,ACTION_MOVE,ACTION_UP三种情况,还有其他的,上面文章还提到一个ACTION_CANCEL,最后尝试一下在在ACTION_CANCEL中执行打开菜单的代码!结果成功了!由此可得,这是当HorizontalScrollView的onTouch被取消的时候,失去监听的时候,就触发了这个ACTION_CANCEL事件!

结论:当HorizontalScrollView的onTouch被取消的时候,失去监听的时候,就触发了这个ACTION_CANCEL事件!

猜你喜欢

转载自blog.csdn.net/u014736095/article/details/48050309