既存のスクロール動作を停止するsmoothScrollToPositionを使用する方法があります。このメソッドには、APIレベル> = 8(Android 2.2、Froyo)が必要です。
現在の位置が希望の位置から大きく離れている場合、スムーズなスクロールにはかなりの時間がかかります(少なくともAndroid 4.4 KitKatでのテストでは少しばかり見えます)。また、setSelectionとsmoothScrollToPositionを呼び出す組み合わせによって、位置が「ミス」する可能性があることがわかりました。これは、現在の位置が目的の位置に非常に近い場合にのみ発生するようです。
私の場合、ユーザーがボタンを押したときにリストが上に移動するようにしたい(これはごくわずかですが、これはあなたのニーズに合わせる必要があります)。できれば
は、私が直接あなたの質問に答えていない
case R.id.action_go_to_today:
ListView listView = (ListView) findViewById(R.id.lessonsListView);
smartScrollToPosition(listView, 0); // scroll to top
return true;
上記を次のように私は、これを呼ばれるボタンのための私のアクションハンドラでは
private void smartScrollToPosition(ListView listView, int desiredPosition) {
// If we are far away from the desired position, jump closer and then smooth scroll
// Note: we implement this ourselves because smoothScrollToPositionFromTop
// requires API 11, and it is slow and janky if the scroll distance is large,
// and smoothScrollToPosition takes too long if the scroll distance is large.
// Jumping close and scrolling the remaining distance gives a good compromise.
int currentPosition = listView.getFirstVisiblePosition();
int maxScrollDistance = 10;
if (currentPosition - desiredPosition >= maxScrollDistance) {
listView.setSelection(desiredPosition + maxScrollDistance);
} else if (desiredPosition - currentPosition >= maxScrollDistance) {
listView.setSelection(desiredPosition - maxScrollDistance);
}
listView.smoothScrollToPosition(desiredPosition); // requires API 8
}
に次のメソッドを使用しますが、現在の位置があなたの希望する位置またはその近くにあるときに検出すると、smoothScrollToPositionを使用してスクロールを停止できます。