我想在我的應用中實現類似iOS的反彈超滾效果。iOS喜歡在Android上過度滾動效果
我碰到這個link,這表明創建了一個自定義ScrollView
。但問題是,當我快速上下滾動時,它工作正常,但只要我拉下屏幕的頂部或底部,它就會卡住,效果不再起作用。
由於該種動畫的一個例子,我想實現你可以看看這個:
這是我目前擁有的代碼:
public class ObservableScrollView extends ScrollView
{
private static final int MAX_Y_OVERSCROLL_DISTANCE = 150;
private Context mContext;
private int mMaxYOverscrollDistance;
public ObservableScrollView(Context context)
{
super(context);
mContext = context;
initBounceScrollView();
}
public ObservableScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
mContext = context;
initBounceScrollView();
}
public ObservableScrollView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
mContext = context;
initBounceScrollView();
}
private void initBounceScrollView()
{
//get the density of the screen and do some maths with it on the max overscroll distance
//variable so that you get similar behaviors no matter what the screen size
final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
final float density = metrics.density;
mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE);
}
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
{
//This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);
}
}
嗨@Xaver Kapler感謝您的更新。還有一個疑問是,在這個我們手動拉下來彈跳。但在所附的屏幕gif中,如果我們滾動並且到達底部,它會反彈回來。同樣在頂部也通過下載應用程序進行檢查。在scrollview中如何實現它? – Star
@明星我不明白你在說什麼。我的答案已經包含了一個解決方案,在您的答案中複製gif。你還想要什麼? –
@Shadow肯定是。所有你需要的是相同的數學來以指數方式來限制過度滾動。 –