【问题标题】:Auto-scrolling of AdapterView (Listview, GridView,...)AdapterView 的自动滚动(Listview、GridView、...)
【发布时间】:2013-09-12 21:44:25
【问题描述】:

背景

我正在尝试让 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);

问题

代码通常可以运行,但在某些情况下,滚动开始需要很长时间。

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

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

由于我不知道如何获取adapterView的当前滚动值,所以我不知道如何解决这个问题。

问题

我可以做些什么来解决这个问题?有其他选择吗?

【问题讨论】:

    标签: android android-listview scroll android-gridview android-adapterview


    【解决方案1】:

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

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

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

    clearAnimation() 停止。

    【讨论】:

    • 不,处理程序工作得很好,因为如果我把日志放在那里,我可以看到它们被打印出来。关于动画,我不明白这有什么帮助......
    • 尝试用mHandler. postAtFrontOfQueue(SCROLLING_RUNNABLE);替换mHandler.post(SCROLLING_RUNNABLE);
    • 再次,处理程序工作正常,因为如果我把日志打印在日志中。滚动效果不好。但是,现在我已经对其进行了测试(以及仅调用 run() 的原始想法),我发现它工作正常。发生了什么事?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多