2012-07-12 38 views
1

爲了提高列表滾動的性能,我有implemented this suggestion而且它絕對可以提高性能。如何確定何時ListView投擲速度放緩

礦實現爲這樣

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    switch (scrollState) { 
     case OnScrollListener.SCROLL_STATE_IDLE: 
      adapter.busy = false; 
      adapter.notifyDataSetChanged(); 
      break; 
     case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: 
      adapter.busy = true; 
      break; 
     case OnScrollListener.SCROLL_STATE_FLING: 
      adapter.busy = true; 
      break; 
    } 
} 

不過,我想,使其更直觀一點吸引力,通過設置adapter.busy儘快假的列表滾動速度超過某一閾值。不過,我已經想出了在滾動時確定滾動速度的好方法。任何幫助將非常感激。

+0

查找什麼? – Arslan 2013-02-01 06:42:40

+0

不幸的是,從那時起,我們改變了很多,滾動性能並不是一個問題。 – Leo 2013-02-01 21:24:26

回答

1

那麼你可以隨時獲得滾動位置。使用CountdownTimer定期檢查最新的滾動位置,並與前一個滾動位置進行比較以確定方向和速度。如果它的移動速度太快,按照更新。一旦你實現了,請張貼結果如上。 (可能還有一個滾動位置變化事件,或者您可能會利用焦點事件更改來確定此事件)。

+0

將嘗試和發佈,感謝您的建議 – Leo 2012-07-12 05:07:37

0

有類似的請求,以下適用於我。 只需要嘗試一下什麼是最好的MIN_VELOCITY

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

      checkFlingVelocitySlowDown(firstVisibleItem, totalItemCount); 
     } 

int mLastScrollInTopItemPosition = 0; 
long mLastTimeTopPositionChanged = System.currentTimeMillis(); 
final double MIN_VELOCITY = 0.01; 
final int TOP_VIEW_ITEMS_RANGE = 3; 
final int BOTTOM_VIEW_RANGE = 6; 

void checkFlingVelocitySlowDown(int scrollInTopItemPosition, int totalItemCount) { 
    try { 
     if (mLastScrollInTopItemPosition != scrollInTopItemPosition) { 
      long now = System.currentTimeMillis(); 
      long timeSpan = now - mLastTimeTopPositionChanged; 
      double velocity = (timeSpan > 0) ? (1.0/timeSpan) : 1000000; 
      mLastScrollInTopItemPosition = scrollInTopItemPosition; 
      mLastTimeTopPositionChanged = now; 

      if (velocity <= MIN_VELOCITY || 
        scrollInTopItemPosition <= TOP_VIEW_ITEMS_RANGE || 
        (Math.abs(totalItemCount - scrollInTopItemPosition) < BOTTOM_VIEW_RANGE)) { 
       // to what ever it should do when scroll closer to top or bottom, or fling is slowing down 
      } 
     } 
    } catch (Exception e) {} 
}