バックグラウンド
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 の現在のスクロール値を取得する方法がわからないため、この問題を修正する方法がわかりません。
質問
この問題を解決するにはどうすればよいですか? 代替手段はありますか?