2013-10-31 31 views
0

我希望能夠防止用戶能夠在我的Android ScrollView中滾動,但仍然能夠檢測他們何時點擊滾動視圖中的按鈕。禁用Android滾動視圖,但仍然允許在滾動視圖中的按鈕上點擊

我已經劃分了ScrollView類,並且一直在擺弄onInterceptTouchEventonTouchEvent方法,但似乎無法讓它完全正確。下面的代碼停止滾動,但似乎禁用點擊(但不是全部,如果你上下沒有任何移動它的工作,但如果你的手指稍微移動,因爲你點擊它不會註冊)。我也剛剛刪除了onInterceptTouchEvent,它幾乎可以工作,但滾動視圖仍然會在用戶移除手指時滾動。

 
    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) 
    { 
     App.log("onInterceptTouchEvent, with action : " + ev.getAction()); 
     switch(ev.getAction()) 
     { 
      case MotionEvent.ACTION_MOVE: 
       return true; 
     } 
     return super.onInterceptTouchEvent(ev); 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) 
    { 
     App.log("onTouchEvent, with action : " + ev.getAction()); 
     switch(ev.getAction()) 
     { 
      case MotionEvent.ACTION_MOVE: 
       return false; 
     } 
     return super.onTouchEvent(ev); 
    } 

回答

2

最後,我發現了以下的解決方案做正是我需要的:

@Override 
public boolean onTouchEvent(MotionEvent ev) 
{ 
    App.log("onTouchEvent, with action : " + ev.getAction()); 
    switch(ev.getAction()) 
    { 
     case MotionEvent.ACTION_MOVE: 
      return false; 
    } 
    return super.onTouchEvent(ev); 
} 
1

您可以覆蓋overscrollBy(),如果禁用更改DELTAX &移動deltaY值設置爲0。

@Override 
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) 
{ 
    final int dx; 
    final int dy; 

    if (isEnabled()) 
    { 
     dx = deltaX; 
     dy = deltaY; 
    } 
    else 
    { 
     dx = 0; 
     dy = 0; 
    } 

    return super.overScrollBy(dx, dy, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); 
} 

您可能還想在禁用/啓用時動態地隱藏/顯示滾動條。

+0

嗯......似乎不是正確的答案,肯定有辦法阻止在一開始不滾動擔心這種'overscroll'業務(並且我不能只用'setOverScrollMode'禁用過度滾動?) –

+1

ScrollView使用該方法執行滾動。無可否認,它幾乎不是一個完美的解決方案,但是在ScrollView的接口上沒有特定的'allowScrolling(boolean)'或類似的特性來執行你想要的,我認爲它和其他方法一樣好。 – nmw

相關問題