android ListView无法停在精确的像素位置

时间:2017-07-24 20:08:18

标签: android listview listviewitem

我想要达到的目的是防止某些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的替代方案吗?

谢谢。

0 个答案:

没有答案