列表视图平滑滚动,直到项目位于顶部

时间:2014-05-11 14:25:19

标签: android listview animation android-listview

我正在开发一个Android应用程序,我有一个包含10个项目的列表视图。我需要做以下事情。当用户单击按钮时,我希望列表平滑滚动到位置5处的项目,因此该项目显示在列表顶部。

我找到了两种可用于此的方法,但这两种方法并不能完全满足我的需要:

listView.setSelection(5)这将滚动到该行并将其放在列表顶部但没有动画

list.smoothScrollToPosition(5)这将滚动列表视图,直到该行可见,但它不会将其置于顶部(它位于页面的底部),如果该行已经全部可见,则它将不会滚动,因为它考虑它是可见的。

那么有没有办法与setSelection方法具有相同的行为但是使用smoothscrolling?

谢谢

2 个答案:

答案 0 :(得分:5)

我相信smoothScrollToPositionFromTop()会做你想要的。

还有one将以毫秒为单位将所需的动画持续时间作为参数。

答案 1 :(得分:0)

  

那么有没有办法与setSelection方法具有相同的行为   但是使用smoothscrolling?

您可以使用Runnable发布延迟ListView.setSelection并创建自己的平滑滚动效果。这是一个例子:

private ListView mListView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mListView.post(new PositionScroller(this));
}

private static final class PositionScroller implements Runnable {

    private static final int SMOOTH_SCROLL_DURATION = 25;
    private int mSelectedPosition;

    private final WeakReference<YourParentActivity> mParent;

    private PositionScroller(YourParentActivity parent) {
        mParent = new WeakReference<YourParentActivity>(parent);
    }

    @Override
    public void run() {
        final ListView list = mParent.get().mListView;
        if (mSelectedPosition <= 5) {
            if (list.postDelayed(this, SMOOTH_SCROLL_DURATION)) {
                list.setSelection(mSelectedPosition++);
            }
        }
    }

}