web-dev-qa-db-ja.com

Android smoothScrollByの動作が悪い

smoothScrollBy()を呼び出しているListViewがあります。 95%の確率で、smoothScrollTo()は意図したとおりに動作します。ただし、意図した場所に到達しない場合があります。私はそれに同じ値を与えていることを確認しました。エラーが発生したときのスムーズなスクロールはそれほどスムーズではないことに気付きましたが、アプリケーションが実行している他のタスクで制御できるものはありません。

バックグラウンドで何が起こっているのかよくわかりませんが、おそらく原因はガベージコレクションです。

この状況では、95%の精度では不十分です。これらのインスタンスでListViewが正しい場所に確実に到達するように、何らかの修正メカニズムを実装する必要があります。

単にsmoothScrollBy()を呼び出す以外に、view.smoothScrollBy(distance, time);を使用するより良い方法はありますか?

49
styler1972

これらのいくつかを試してください:

Listviewには独自のスクロールメカニズムがあります。コンテンツが追加されるとスクロールします。

  1. リストビューの高さ(Android:layout_height)をmatch_parentまたはfill_parentに割り当てます。

  2. 作業スレッドでアダプタを割り当てる場合。スレッドでUIアクションを実行しないでください。

これらが問題を解決しない場合。アダプターをリストビューに割り当てるコードがある場合は、それを投稿してください。または関連するコード。

また、xmlレイアウトコード。

お役に立てれば。

6
mipreamble

タイミングの問題が原因の場合もあります。ビューがリストビューに追加されたときとその時間

view.smoothScrollBy(distance, time);

リストビューまたはUIを更新する必要はありません。したがって、ビューの投稿スレッドで特定の遅延を使用してこれを実行します。例えば。

view.postDelayed(new Runnable{
    view.smoothScrollBy(distance, time);
},1000);
5
Arun