如何在列表视图上获得滚动速度?
我有一个ListView,带有onScrollStateChanged和onScroll事件侦听器。我希望能够获得ListView的滚动速度,或者以某种方式获取某些事件侦听器中启动的滚动的最终X位置。我们的应用面向 SDK 版本 7。
我需要测量或获取 ListView 滚动的速度。
我有一个ListView,带有onScrollStateChanged和onScroll事件侦听器。我希望能够获得ListView的滚动速度,或者以某种方式获取某些事件侦听器中启动的滚动的最终X位置。我们的应用面向 SDK 版本 7。
我需要测量或获取 ListView 滚动的速度。
划分第一可见项目在时间差上的差异不是一个好的解决方案。OnScroll 侦听器每隔固定时间段接收 onScroll 事件,因此在大多数情况下,除法的结果将为“0”。
所以你可以尝试这样的事情:
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) {
}
};
试试看:
private class SpeedMeterOnScrollListener implements OnScrollListener {
private long timeStamp;
private int lastFirstVisibleItem;
public SpeedMeterOnScrollListener() {
timeStamp = System.currentTimeMillis();
lastFirstVisibleItem = 0;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
long lastTime = System.currentTimeMillis();
//calculate speed by firstVisibleItem, lastFirstVisibleItem, timeStamp and lastTime
timeStamp = lastTime;
lastFirstVisibleItem = firstVisibleItem;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}