5

背景

我正在尝试制作一个 AdapterView (listview, gridview,...) 来慢慢地自动滚动。

用户可以随时切换它,并且不需要一直移动到adapterView的末尾。

同样,我不希望让 adapterView 一直滚动到底部,因为用户应该能够取消自动滚动。

我试过的

为此,我正在使用下一个代码:

private static final SCROLLING_RUNNABLE = new Runnable() {

    @Override
    public void run() {
        final int duration = 10;
        final int pixelsToMove = 1;
        mAdapterView.smoothScrollBy(pixelsToMove, duration);
        mHandler.postDelayed(this, duration);
    }
};

...
// use this to turn auto-scrolling on:
mHandler.post(SCROLLING_RUNNABLE);
// use this to turn auto-scrolling off:
mHandler.removeCallbacks(SCROLLING_RUNNABLE);

问题

该代码通常有效,但在某些情况下,滚动开始需要很长时间。

事实上,似乎我打开和关闭它的次数越多,我就越需要等待它开始自动滚动。

我认为只有当我滚动回顶部时才会出现此问题。当适配器视图滚动一点时,它工作得很好。

因为我不知道如何获取适配器视图的当前滚动值,所以我不知道如何解决这个问题。

问题

我能做些什么来解决这个问题?有替代方案吗?

4

1 回答 1

1

你可以开始滚动SCROLLING_RUNNABLE.run();

更新或者您可以使用动画:

Animation animation = new Animation() {
            @Override
            protected void applyTransformation(float interpolatedTime, Transformation t) {
                super.applyTransformation(interpolatedTime, t);
                // scroll the list
            }
        };

clearAnimation()停止。

于 2013-09-09T12:17:21.860 回答