我有一个ViewPager,它使用GridViews作为页面。当我在屏幕上滑动时,我希望ViewPager切换页面。

问题是在GridView上进行滑动时未检测到滑动。在GridView外部,滑动可以正常工作。似乎GridView捕获了所有触摸事件,而没有先将其传递给ViewPager。

在摆弄源代码的同时,我对从GridView扩展的自定义类进行了此操作:

@Override
public boolean onTouchEvent(MotionEvent event) {
    return pager.onInterceptTouchEvent(event);
}

-其中pager引用ViewPager类。这样,ViewPager将正确检测滑动并相应地移动页面,但是它不允许GridView接受任何事件,因此我无法单击这些项目。

我想做的是正确检测ViewPager中的滑动和GridView上的项目单击。

最佳答案

我对colig的实现有麻烦,但是我可以通过将ViewPager子类化并重写onInterceptTouchEvent()方法来使其工作。我只检查了X方向上的滑动,以便在必要时进行垂直滚动。

private static final int minSwipeDistance = 30;
private float mTouchX;

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    boolean response = super.onInterceptTouchEvent(event);
    float x = event.getX();
    switch (event.getActionMasked()) {
    case MotionEvent.ACTION_DOWN:
        mTouchX = x;
        break;
    case MotionEvent.ACTION_MOVE:
        float dX = Math.abs(x - mTouchX);
        if (dX > minSwipeDistance)
            return true;
        break;
    }
    return response;
}

关于android - 正确检测在Android中放置在ViewPager内的GridView上的滑动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9839569/

10-11 22:38
查看更多