Java Android Wear GridViewPager手势

Java Android Wear GridViewPager手势,java,android,wear-os,Java,Android,Wear Os,我有两行三列的GridViewPager。作为默认行为,如果在任何页面上向下滑动,它将导航到下一行的第一页。但我想覆盖这种行为,并停止在第一行、第二列和第三列上向下滑动 我尝试过将两行一列的GridViewPager和一个ViewPager放在第一个单元格中,以及将一行三列的GridViewPager和另一个一列二行的GridViewPager放在第一个单元格中。两者都有类似的滚动问题。下面的代码是我用来更改滚动行为的自定义GridViewPager GridViewPager应该只能像下图那样

我有两行三列的GridViewPager。作为默认行为,如果在任何页面上向下滑动,它将导航到下一行的第一页。但我想覆盖这种行为,并停止在第一行、第二列和第三列上向下滑动

我尝试过将两行一列的GridViewPager和一个ViewPager放在第一个单元格中,以及将一行三列的GridViewPager和另一个一列二行的GridViewPager放在第一个单元格中。两者都有类似的滚动问题。下面的代码是我用来更改滚动行为的自定义GridViewPager

GridViewPager应该只能像下图那样滑动


您应该能够通过覆盖
canscrollvertical(int-direction)
来控制它;我没试过,但听起来是个好地方。这就是说,请小心更改该行为,因为它将与使用此组件的其他应用程序不同,并且假设没有其他行等,您的应用程序的用户可能会感到困惑。

您应该能够通过覆盖
CanScrollVertical(int-direction)
;我没试过,但听起来是个好地方。也就是说,请小心更改该行为,因为它将与使用此组件的其他应用程序不同,并且假设没有其他行,您的应用程序的用户可能会感到困惑,等等

public class GridViewPagerCustom extends GridViewPager {
    private GestureDetector mGestureDetector;
    private int px = 0;
    private int py = 0;

    public int getPy() {
        return py;
    }

    public void setPy(int py) {
        this.py = py;
    }

    public int getPx() {
        return selectedPage;
    }

    public void setPx(int px) {
        this.px = px;
    }

    public GridViewPagerCustom(Context context, AttributeSet attrs) {
        super(context, attrs);
        mGestureDetector = new GestureDetector(context, new YScrollDetector());
        setFadingEdgeLength(0);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
    }

    // Return false if we're scrolling in the x direction
    class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            return (getPx() == 0 && getPy() == 0) ? Math.abs(distanceY) > Math.abs(distanceX) : false;
        }
    }
}