アニメーションを終了するために必要な期間に問題があるようです。同じ問題が SmoothScrollBy(int distance, int duration) にも存在します。ざっと見ただけで、smoothScrollToPosition() は、多くの処理を行う SmoothScrollBy() の親しみやすいラッパーです。レッグワーク。SmoothScrollBy() は、ユーザーがモーションを作成したかのように、「フリング ジェスチャ」を偽造しています。
SmoothScrollBy は実際には、期間がなくなるまで再投稿し続ける fling ランナブルを投稿するだけです。つまり、以前に移動することを決定したオフセットに基づいて必要なスクロール オフセットを計算するだけなので、ターゲット オフセットに到達する前に期間が切れると、最後に計算されたオフセットで停止します。(ターゲット オフセットに突然ジャンプするのではなく、アニメーション化されないため、おそらくより耳障りです)。
ListView セル (子) は高さが完全に動的であるため、Android の担当者にとって困難なのは、必要なオフセットに到達するために各 run() 呼び出しでどれだけ移動するかを決定することです。目に見える子供の身長は彼らにはわかりません。これは、Android のスクロールバーがスクロールするとサイズが変動するのと同じ理由で、現在表示されているものに基づいてどのくらいの大きさになるべきかを推測する必要があります。
とにかく、それはあなたがそれを解決するのに役立ちませんが、誰かがそれを面白いと思うかもしれません:)
ただし、セルの高さが静的であることがわかっている場合は、独自のメソッドを記述して、smoothScrollBy() に渡す距離と期間を自分で計算し、X 距離を移動する静的な時間を確保できます。そうでない場合は、1000 ミリ秒の高い SCROLL_DURATION のために実際に機能しているソリューション bigstones を使用するだけで十分です。根本的な原因ではない 2.2 バージョンを使用するのではなく、ICS バージョンを使用してこの属性を変更することもできます。
これらのランナブルを独自のカスタム アルゴリズムに適合させることもできます。微調整はそれほど難しくありません。