2011-09-28 12 views
5

smoothScrollBy()を使用してListViewの特定の位置にスクロールしています。 ListViewがスクロールして現在のonScrollStateChanged()イベントと統合すると、ユーザーが指でスクロールしたときにそのイベントが発生したときに通知を受けたいと思います。Android smoothScrollToがonScrollStateChangedを呼び出さない

現在のところ、スムーススクロールの時間が100ms後に実行されるTimerを使用していますが、これはイベント駆動型ではありません。

+1

私は 'smoothScroll *'関数は、スクロール状態変化をトリガーするため、 '(OnScrollListener.onScrollStateChanged表示されませんが)'無用コールバック私自身のデバッグから確認することができます。 – ohhorob

答えて

2

リストビューにOnScrollListenerを実装していれば、ScrollStateがいつ変更されるかを見ることができます。 OnScrollListenerがSCROLL_STATE_IDLEのScrollStateを登録すると、smoothScrollBy()を呼び出してからfalseに設定すると、グローバルブール値(isScrolling)がtrueに設定されます。

sidebar1.smoothScrollToPositionFromTop(currentPosition, 0, 500); 
isScrolling = true; 

sidebar1.setOnScrollListener(new OnScrollListener() { 

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
     isScrolling = false; 
    } 

} 

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

} 
}); 
+0

残念ながら、API 11で 'smoothScrollToPositionFromTop'が入ってきました。 – styler1972

+0

スクロールが完了したときに通知されるのは本当ですか? smoothScrollByを使用し、isScrolling状態を継続的にポーリングするwhileループと一緒にリスナーを実装することができます。 – saulpower

+2

私の経験から、 'smoothScrollBy()'は 'onScrollStateChanged()'を呼び出さないので、今度は 'Timer'を使ってスクロールを行う必要があります。 – styler1972

関連する問題