How to get the scroll speed on a ListView?

前端 未结 6 1432
逝去的感伤
逝去的感伤 2020-12-13 15:09

I have a ListView with onScrollStateChanged and onScroll event listeners. I want to be able to get the scroll speed of the ListView or some way to get the finalX location of

6条回答
  •  执笔经年
    2020-12-13 15:25

    Division first visible items difference on time difference is not a good solution. OnScroll listener recieves onScroll event every fixed period of time, so in most cases the result of division will be "0".

    So you can try something like this:

    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) {
        }
    };
    

提交回复
热议问题