5

バックグラウンド

AdapterView (リストビュー、グリッドビューなど) をゆっくりと自動スクロールするようにしようとしています。

ユーザーはいつでもそれを切り替えることができ、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 の現在のスクロール値を取得する方法がわからないため、この問題を修正する方法がわかりません。

質問

この問題を解決するにはどうすればよいですか? 代替手段はありますか?

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 に答える