2015-11-12 72 views
1

我有2行3列的GridViewPager。作爲其默認行爲如果你在任何頁面上向下滑動,它將導航到下一行的第一頁。但我想覆蓋該行爲並停止在第一行第二和第三列向下滑動。Android Wear GridViewPager手勢

我已經嘗試把2行1列GridViewPager和放置一個ViewPager的第一個單元格以及使用1行3列GridViewPager與另一個1列2行GridViewPager在第一個單元格。兩者都有類似的滾動問題。同伴代碼是我用來更改滾動行爲的自定義GridViewPager。

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

回答

0

您應該能夠通過覆蓋canScrollVertically(int direction)來控制;我沒有嘗試過,但聽起來像是正確的地方。也就是說,請注意改變這種行爲,因爲它會與其他使用此組件的應用程序不同,並且假設沒有其他行等,您的應用程序的用戶可能會感到困惑。