如何獲得ListView當前的滾動速度

vtmnbjnarlr 8年前發布 | 7K 次閱讀 Android開發 移動開發

來自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2014/0918/1691.html


設想如下一個場景,有一個顯示大量圖片的ListView,為了讓圖片的加載更流暢,我希望在滾動速度很快的時候暫時不去加載和顯示圖片,而當滾動速度小于某個值時才去加載。這就需要獲得ListView的滾動速度,但是ListView并沒有直接提供這樣的方法。

但是我們可以通過一個比較巧妙的方式獲得能代表這個速度快慢的值:

原理:給ListView添加OnScrollListener然后在OnScrollListener的onScroll方法中根據firstVisibleItem參數變化時的時間差來獲得一個速度:

實現如下:

private OnScrollListener onScrollListener = new OnScrollListener() {
    private int previousFirstVisibleItem = 0;
    private long previousEventTime = 0;
    private double speed = 0;
    @Override
    public void onScroll(HtcAbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        if (previousFirstVisibleItem != firstVisibleItem){
            long currTime = System.currentTimeMillis();
            long timeToScrollOneElement = currTime - previousEventTime;
            speed = ((double)1/timeToScrollOneElement)*1000;
            previousFirstVisibleItem = firstVisibleItem;
            previousEventTime = currTime;
            Log.d("DBG", "Speed: " +speed + " elements/second");
        }
    }
    @Override
    public void onScrollStateChanged(HtcAbsListView view, int scrollState) {
    }
};

speed即為我們所需要的值,雖然他并不真正是ListView的速度本身,但是它的大小能體現出ListView的快慢,對于上面提到的場景來說已經足夠了。

這種方式是目前我找到的最好方式。

 本文由用戶 vtmnbjnarlr 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!