我正在开发一个Android应用程序,我有一个包含10个项目的列表视图。我需要做以下事情。当用户单击按钮时,我希望列表平滑滚动到位置5处的项目,因此该项目显示在列表顶部。
我找到了两种可用于此的方法,但这两种方法并不能完全满足我的需要:
listView.setSelection(5)
这将滚动到该行并将其放在列表顶部但没有动画
list.smoothScrollToPosition(5)
这将滚动列表视图,直到该行可见,但它不会将其置于顶部(它位于页面的底部),如果该行已经全部可见,则它将不会滚动,因为它考虑它是可见的。
那么有没有办法与setSelection
方法具有相同的行为但是使用smoothscrolling?
谢谢
答案 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++);
}
}
}
}