Android ListView:获取Overscroll距离

时间:2013-09-15 18:22:19

标签: java android listview mobile

无论如何要确定用户在Android ListView中拥有overscrolled的确切像素数?当用户尝试向上滚动浏览第一个列表项并且 overscroll / bounce 动画启动时,我需要检测过度滚动距离。基本上我会在那个空间做一些事情,比如动画中的折叠,类似于 iPhone 上的Clear应用。

我尝试在我的ListView上调用getScrollY()getTop()及其项目(使用getChildAt(0).getTop),但所有内容都返回0.作为参考,我的列表项目都是相同的高度

我还尝试向onScrollListener添加listview,只计算ACTION_DOWN上原始Y pos与ACTION_MOVE上Y pos之间的差异,但似乎listview以较慢的速度滚动。

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:3)

如果重写这种方法呢?

protected boolean overScrollBy (int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)

scrollY将保持为0,但是当isTouchEvent为true时,您可以累积deltaY以获取用户过度滚动的距离。

答案 1 :(得分:2)

经过多次挖掘,甚至更多的挫折,答案似乎是你不能。更令人烦恼的是,我看了一下Android source code并且可以看到我需要的代码很好地隐藏在AbsListView的内部gubbings中。但一切都不会丢失。似乎您可以使用AbsListView作为指南构建自己的视图,并在其中执行您需要的操作。它比我想要的更长,但也是如此。我还找到了一个很好的tutorial关于如何构建自己的视图,你可以在其中做任何你想做的事。

修改

我终于在Github上运行了一个演示程序。如果您有兴趣,可以找到它here。当您从顶部向下拉时,新视图将会旋转,如果您放开或向上滚动,视图将会旋转。

答案 2 :(得分:-2)

起初我认为我可以在onOverScrolled上获得过度滚动距离, 但在onOverScrolled(int scrollX,int scrollY,boolean clampedX,boolean clampedY)

scrollX要么是0,要么是maxOverScrollDistence。

所以你不能在那里得到Overscroll距离。

但你可以在

获得Overscroll距离
  

protected boolean overScrollBy(int deltaX,int deltaY,int scrollX,int scrollY,int scrollRangeX,int scrollRangeY,int maxOverScrollX,int maxOverScrollY,boolean isTouchEvent)

例如,如果您的滚动视图垂直滚动, 然后

  

如果(移动deltaY + scrollY℃,)   {overscrollDistance = deltaY + scrollY}