我想要达到的目的是防止某些listView超出某个精确位置。 让我们说我想在到达列表顶部的像素150时停止(所有行具有相同的高度,此刻为240px),我现在正在做的是:
public abstract class EndlessScrollListener implements AbsListView.OnScrollListener {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){
int firstVisibleItemTop = -1;
View v = view.getChildAt(0);
if(v != null) {
firstVisibleItemTop = v.getTop();
}
if(firstVisibleItemTop >= 150){
//to prevent the list to scroll
view.smoothScrollBy(0,0);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//same logic here
}
}
(我还在listView上实现了相同的逻辑,当手指仍然在屏幕上时,例如MotionEvent.ACTION_MOVE的情况下,在listView上具有自定义OnTouchListener)
问题是我的OnScrollListener没有经常回调,因此超出了位置,我最终显示了不应该可见的listView的一部分。滚动越快,位置就越多。我也试图增加清单的摩擦力,这有助于缩小差距,但并没有解决问题。
我想listView对象并不适合这种用途(每个像素的回调看起来都不合理)但我找不到任何其他方法来实现这一点,除非我自定义ListView类但看起来很痛苦实现
也许你可以推荐一个保持ListView的解决方案,或者指向一个可能做到这一点的ListView的替代方案吗?
谢谢。