2015-05-06 60 views
9

我已經基於以下職位覆蓋overScrollBy方法ScrollViewoverScrollBy並不總是反彈的棒棒糖(5.x的)平臺

http://jasonfry.co.uk/blog/android-overscroll-revisited/

它正在開發其他平臺版本的罰款,但如果對於ScrollView應用了反彈動作,則棒棒糖無法反彈。

任何人都遇到過這個問題,並找到解決方法?

在調用構造函數setOverScrollMode(OVER_SCROLL_ALWAYS);

這裏相關的代碼,我在我的自定義ScrollView類已覆蓋:

@Override 
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, 
           int scrollY, int scrollRangeX, int scrollRangeY, 
           int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { 
    return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, 
      scrollRangeX, scrollRangeY, maxOverScrollX, OVER_SCROLL_AMOUNT, 
      isTouchEvent); 
} 

感謝。

+0

你可以發佈你的當前代碼嗎? –

+0

它似乎是按照我的意圖工作的,請問您能詳細解釋發生了什麼問題,併發布一些代碼? – memoizr

+0

更新了相關的代碼,您正常滾動界限,然後應用投擲動作,滾動視圖停止。 – Niko

回答

4

我挖掘了KitKat和棒棒糖ScrollView之間的變化。以下代碼解決了我的問題。

@TargetApi(21) 
@Override 
public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { 
    // Not consumed means it wasn't handled because ScrollView 
    // doesn't take over scrolling bounds into scroll range, 
    // so we fling it ourselves to get it bounce back 
    if (getOverScrollMode() == OVER_SCROLL_ALWAYS && !consumed) { 
     fling((int) velocityY); 

     return true; 
    } else { 
     return super.dispatchNestedFling(velocityX, velocityY, consumed); 
    } 
} 
+0

棒棒堂5.1不適合我。所以我只用這兩行代替那個函數:'fling((int)velocity);返回true;'。現在它起作用了。 –