无论如何要确定用户在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
以较慢的速度滚动。
任何帮助都会很棒。
答案 0 :(得分:3)
如果重写这种方法呢?
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}