简体   繁体   English

Android Wear GridViewPager手势

[英]Android Wear GridViewPager Gesture

I have GridViewPager with 2 rows and 3 columns. 我有2行3列的GridViewPager。 As its default behavior If u swipe down on any page it will navigate to first page of next row. 作为默认行为,如果您向下滑动任何页面,它将导航到下一行的第一页。 But i want to override that behaviorand stop Swipe Down on first row second and third columns. 但是我想覆盖该行为并停止在第一行第二和第三列上向下滑动。

I have tried putting 2 row one column GridViewPager and putting a ViewPager for first cell as well as using 1 row 3 column GridViewPager with putting Another 1 column 2 row GridViewPager in first cell. 我尝试将2行一列GridViewPager放置在第一个单元格中放置一个ViewPager,以及将1行2列GridViewPager放置在第一个单元格中并使用1行3列GridViewPager。 Both has similar scrolling problems.Bellow code is the custom GridViewPager I used to change scrolling behavior. 两者都有类似的滚动问题。下面的代码是我用来更改滚动行为的自定义GridViewPager。

GridViewPager should be able swipe only as following picture. GridViewPager应该只能如下图所示滑动。 Swipe Example Image 滑动示例图片

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;
        }
    }
}

You should be able to control that by overriding canScrollVertically(int direction) ; 您应该能够通过覆盖canScrollVertically(int direction)来控制它; I haven't tried that but sounds like the right place. 我没有尝试过,但听起来像是正确的地方。 That said, please be careful about changing that behavior since it will then be different from other apps that use this component and users of your app may get confused assuming that there are no other rows, etc. 也就是说,请谨慎更改该行为,因为它会不同于使用该组件的其他应用,并且假设没有其他行等,您的应用用户可能会感到困惑。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM