2011-11-15 122 views
1

我現在正在工作,爲了禁用水平滾動的horizo​​ntalscrollview(ID:ordermenu)其中scrollview(我的意思是垂直scrollview ID的scrollview的孩子relativelayout:category01layout ,category02layout,...)作爲孩子。Android-禁用水平滾動的horizo​​ntalscrollview作爲子視圖滾動視圖

這裏是什麼樣子的XML:

Horizo​​ntalScrollView(ordermenu)
- LinearLayout中
    - 滾動型
        - RelativeLayout的(category01layout)
    - 滾動型
        - 的RelativeLayout(category02layout)
...
    - 滾動型
        - RelativeLayout的(category08layout)

屏幕顯示每次一個類別的佈局,當我按上一頁/下一頁按鈕,它將設置horizo​​ntalscrollview.smoothScrollTo()更改類別佈局。

所以當我運行應用程序並滾動時,我的手指正在滾動Horizo​​ntalScrollView和ScrollView。但我不想讓我的手指讓這兩個人聽onScrollChanged。我只希望ScrollView聽我的手指'只能垂直滾動'。由於我不知道如何做到這一點,所以只有當我以精確的垂直方向滾動時,ScrollView才能以平滑的方式垂直滾動。否則,我的手指也滾動Horizo​​ntalScrollView,我沒有想到。

那麼有什麼辦法可以禁用水平滾動並只啓用垂直滾動嗎?

我以前用這個方法(創建延伸Horizo​​ntalScrollView類)

@Override 
protected void onScrollChanged(int x, int y, intoldx, intoldy){ 
if(Math.abs(x - oldx) <= 50){ 
mScrollable = false; 
} 
else { 
mScrollable = false; 

} 
return; 
} 

但這只是造成了很大的負擔,爲用戶界面,使垂直滾動滾動型太僵硬和緩慢的。所以請給我另一種方式比這個。

在此先感謝。

回答

0

我在我的Horizo​​ntalScrollView的子類中有以下方法,它允許我垂直和水平滾動。基本上,如果它檢測到垂直滾動,它會放棄觸摸。根據自己對你的反應有多敏感,玩最小距離。

private float SWIPE_VERT_MIN_DISTANCE = 100; 
private float startlocation = 0; 
    private float diffY = 0; 
    private boolean vertScroll = false; 

    public boolean onInterceptTouchEvent (MotionEvent ev){ 
     boolean ret = super.onInterceptTouchEvent(ev); 



     switch(ev.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       startlocation = ev.getY(); 
       vertScroll = false; 
       break; 
      case MotionEvent.ACTION_MOVE: 
       diffY = Math.abs(startlocation - ev.getY()); 
       if(diffY > SWIPE_VERT_MIN_DISTANCE) 
        vertScroll = true; 
       break; 
      case MotionEvent.ACTION_UP: 
       break; 
     } 

     if(ret){ 
      if(vertScroll) 
       return false; 
      else 
       return true; 
     } 

     return ret; 
    } 
0

我想你在這裏真正想要的是一個ViewPager。順便提一句,Google的Android開發人員經常提到以下規則:

  1. 您不會在其他滾動視圖中放置滾動視圖。
  2. 您不要在滾動視圖中放置列表視圖。
+0

是的,所以我改變了viewflipper裏面的滾動視圖的代碼。謝謝〜 – Macchiato13

+0

真棒:)很高興你有它的工作。 – dmon

0

除了你的這個問題,我建議你帶一個視圖翻轉器。

然後將佈局(單擊下一個/ prev按鈕後將更改的佈局)放入其中。

現在,當下一個按鈕將被點擊時,使用動畫(如右/左/右)做viewFlipper.showNext()/ viewFlipper.showPrevious()。

因此,您可以平滑地顯示佈局。嘗試一下。我這樣做。它應該工作。

+0

是的,我用了viewflipper。我多麼愚蠢! – Macchiato13

+0

你做了我說的嗎?它有效嗎? – Debarati

0

嘗試使用視圖切換器,其中不需要在其他滾動視圖內滾動視圖並在滾動視圖內列出視圖。

我希望你很快解決你的問題。

相關問題