我想在Android ListView上实现“快照”效果。具体来说,当ListView停止滚动时,我希望它停在某些位置,以便完全显示第一个可见项目。要做到这一点,我需要能够估计当用户停止拖动或投掷时ListView将停止的最终位置。
在拖动的情况下,当我们收到ACTION_UP或ACTION_CANCEL事件时,我可以简单地将当前Y偏移作为最终位置读取。
在投掷的情况下,当我们收到ACTION_UP或ACTION_CANCEL事件时,我需要一些额外的信息来确定ListView因减速期而停止滚动的最终位置。
iOS通过willEndDragging中的targetContentOffset参数提供此类信息。 Android中是否有可用的等效信息?
这与我提出的另一个问题有关但没有得到回应:In Android, how to achieve snap effect on a listview while respecting acceleration caused by fling?
答案 0 :(得分:0)
我会覆盖TestListView的 OnScroll 事件,如:
@Override
public void onScroll(AbsListView lw, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {
// Determine when the last row item is fully visible.
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem >= totalItemCount) {
Log.d("onScroll", "Reached last item");
}
}
}
请注意,此监听器会为您提供第一个可见位置 /项,以及Listview中行数。
我会使用这个监听器,因为有时getFirstVisiblePosition()不准确,特别是在我们正在使用的虚拟ListView上。 onTouchEvent 的onScroll 覆盖方法的另一个优势是onScroll比onTouchEvent覆盖的触发器更少。我的经验很快。 让我们发布,我对此问题感兴趣。此致,Tommy Kwee