2014-10-07 72 views
2

我有一個2到4頁的viewpager。其中一個頁面以表格的形式顯示數據。爲此,我使用垂直滾動和水平滾動。horizo​​nalscrollview viewpager裏面

由於horizo​​ntalscrollview和viewpager之間存在衝突,有時滾動不做任何事情。

我想向左滾動頁面。當到達邊緣時,另一個輕掃手勢將使其更改頁面瀏覽器,遵循http://developer.android.com/design/patterns/swipe-views.html 的指導原則,其中規定:「如果視圖包含超出屏幕寬度的內容,如廣泛的電子郵件消息,請確保用戶的初始滑動將在視圖內水平滾動,一旦達到內容的結尾,額外的滑動應該導航到下一個視圖。此外,當內容水平滾動時,支持使用邊緣滑動來立即在視圖之間導航。

我該如何做到這一點?

+0

這可能是棘手的。將需要編寫自定義觸摸偵聽器並使用requestDisallowInterceptTouchEvent指令。看看它是如何在PhotoView庫中完成的(它可以使用ViewPager進行滾動)https://github.com/chrisbanes/PhotoView – httpdispatch 2014-10-07 11:41:27

回答

2

最後我一個定製尋呼機和overrided方法canScroll喜歡這樣

@Override 
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
    if (v instanceof HorizontalScrollView) { 
     HorizontalScrollView scroll = (HorizontalScrollView) v; 

     int vScrollX = scroll.getScrollX(); 
     TableLayout table = (TableLayout) scroll.getChildAt(scroll 
       .getChildCount() - 1); 
     int diff = (table.getRight() - (scroll.getWidth() 
       + scroll.getScrollX() + table.getLeft())); 

     if (vScrollX == 0 && diff <= 0) {// table without scroll 
      if (dx > 20 && this.getCurrentItem() > 0) { 
       this.setCurrentItem(this.getCurrentItem() - 1, true); 
      } else if (dx < -20 
        && this.getCurrentItem() + 1 < this.getChildCount()) { 
       this.setCurrentItem(this.getCurrentItem() + 1, true); 
      } 
      return false; // change page 
     } 
     if (vScrollX == 0 && dx > 20) {// left edge, swiping right 
      if (this.getCurrentItem() > 0) { 
       this.setCurrentItem(this.getCurrentItem() - 1, true); 
      } 
      return false; // change page 
     } 
     if (vScrollX == 0 && dx < -20) {// left edge, swiping left 
      return true;// scroll 
     } 
     if (diff <= 0 && dx > 20) {// right edge, swiping right 
      return true;// scroll 
     } 
     if (diff <= 0 && dx < -20) {// right edge, swiping left 
      if (this.getCurrentItem() + 1 < this.getChildCount()) { 
       this.setCurrentItem(this.getCurrentItem() + 1, true); 
      } 
      return false;// change page 
     } 
    } 
    return super.canScroll(v, checkV, dx, x, y); 
} 
相關問題