Android setOnTouchListener

时间:2012-06-25 20:24:59

标签: android gesture

我已经阅读了同一个问题的一些不同的回答,所以我不知道哪一个是正确的,然后我决定再问一遍。请尽量不要在此答案中引用任何其他链接。如果你想这样做,我会期待一些额外的解释。

我的问题是: 我在ImageView内有一个ViewPagerImageView有一些手势检测(缩放和平移),我使用默认的ViewPager,默认情况下会进行滑动检测。 onTouch事件链如何运作?我的层次结构中的最低视图将始终获取onTouch,如果该方法返回false,父级会处理它吗?也许相反?

我问的是,因为我有一个左右手势的ImageView,当我进入图像的边缘时,我必须向父母发送一个事件({{1}处理分页事件。如果有任何进一步的提示,我们将非常感激。

2 个答案:

答案 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);
    }
}

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/support/v4/view/ViewPager.java#ViewPager.canScroll%28android.view.View%2Cboolean%2Cint%2Cint%2Cint%29

答案 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应该为您解决这个问题。