2013-11-22 2 views
1

Как вы используете onOverScrolled в ScrollView?Использование onOverScrolled в ScrollView

protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY) 

В clampedX и clampedY булевы делать скажите мне, если overscroll произошло, но значения прокрутки ничего не говорят о том, сколько overscroll (они всегда 0 или максимальная прокрутки). В чем их смысл?

Кроме того, он все время называется. Я ожидал, что это будет вызвано только тогда, когда одно из зажатых значений истинно.

ответ

5

У меня есть подкласс ScrollView для предоставления более полезного onOverScrolled. Это выглядит так:

public interface OnOverScrolledListener { 
    void onOverScrolled(android.widget.ScrollView scrollView, 
         int deltaX, int deltaY, boolean clampedX, boolean clampedY); 
} 

private OnOverScrolledListener mOnOverScrolledListener; 

private int mOverScrollByDeltaX; 
private int mOverScrollByDeltaY;  

@Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { 
    this.mOverScrollByDeltaX = deltaX; 
    this.mOverScrollByDeltaY = deltaY; 
    final boolean result = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); 
    return result; 
}; 

@Override 
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { 
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); 
    if (mOnOverScrolledListener != null && (clampedX || clampedY)) { 
     mOnOverScrolledListener.onOverScrolled(this, mOverScrollByDeltaX, mOverScrollByDeltaY, clampedX, clampedY); 
    } 
} 

public OnOverScrolledListener getOnOverScrolledListener() { 
    return mOnOverScrolledListener; 
} 

public void setOnOverScrolledListener(OnOverScrolledListener onOverScrolledListener) { 
    this.mOnOverScrolledListener = onOverScrolledListener; 
} 
Смежные вопросы