我已经阅读了同一个问题的一些不同的回答,所以我不知道哪一个是正确的,然后我决定再问一遍。请尽量不要在此答案中引用任何其他链接。如果你想这样做,我会期待一些额外的解释。
我的问题是:
我在ImageView
内有一个ViewPager
,ImageView
有一些手势检测(缩放和平移),我使用默认的ViewPager
,默认情况下会进行滑动检测。
onTouch事件链如何运作?我的层次结构中的最低视图将始终获取onTouch,如果该方法返回false,父级会处理它吗?也许相反?
我问的是,因为我有一个左右手势的ImageView
,当我进入图像的边缘时,我必须向父母发送一个事件({{1}处理分页事件。如果有任何进一步的提示,我们将非常感激。
答案 0 :(得分:2)
所以,我以更好的方式管理了ViewPager的子视图中的多个触摸,然后onInterceptTouchEvent,我这样说,因为在我的情况下,为了知道我是否必须滚动子视图而不是寻呼机,我需要起点和终点之间的距离,我不想保留变量并计算之后的增量。
无论如何,在进入ViewPager的源代码之后,我发现由于这个原因,我应该实现一个非常好的方法。 这是我的实施:
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (v instanceof ImageViewTouch) {
return ((ImageViewTouch) v).canScroll(dx);
} else {
return super.canScroll(v, checkV, dx, x, y);
}
}
答案 1 :(得分:1)
它首先运行相反的ViewPager,然后使用ImageView获取它。
我会在自定义View Pager上使用onInterceptTouchEvent(MotionEvent ev)。在MotionEvent上,您需要分析ev.getPointerCount()有多少个触点。
如果您有ev.getPointerCount()== 2,您可能希望在ImageView中进行缩放和缩放。
如果你有ev.getPointerCount()== 1,那么你可能想要浏览View Pager的页面或在ImageView中执行平移。为了区分这两者,您需要弄清楚是否使用1个手指或简单的MotionEvent.MOVE执行平移手势。滑动手势要求用户超过预定义的速度。 GestureDetector应该为您解决这个问题。