过度滚动ListView卡在错误的位置

时间:2014-04-11 22:53:22

标签: android listview

我想将过度滚动添加到ListView,因此您可以比第一个或最后一个元素滚动得更远,当您释放时,它会快速回退。那里有很多教程和问题。所有人都说要创建一个自定义的ListView类来覆盖overScrollBy()并将我的自定义最大Y过度滚动距离传递给父类。

@Override
protected boolean overScrollBy(final int deltaX, final int deltaY, final int scrollX, final int scrollY,
        final int scrollRangeX, final int scrollRangeY, final int maxOverScrollX, final int maxOverScrollY,
        final 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, mMyMaxYOverscrollDistance, isTouchEvent);
}

事情是,如果你真的小心翼翼地过度滚动,这只能快速恢复。通常它会陷入过度滚动的位置。关于如何在任何情况下使其恢复的任何想法?

由于

1 个答案:

答案 0 :(得分:0)

我可以通过减少最大过度滚动距离来解决这个问题:

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

    final int maxYOverscroll = isTouchEvent ? mMaxYOverscrollDistance : (int) (Math.abs(scrollY) * 0.9f);
    return super.overScrollBy(deltaX, deltaY / 2, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX,
            maxYOverscroll, isTouchEvent);
}