Android ListView:获取Overscroll距离

6
有没有办法确定用户在Android ListView中overscroll的确切像素数量?当用户尝试向上滚动超过第一个列表项时, overscroll / bounce 动画启动,我需要检测overscroll距离。基本上,我会在那个空间做一些事情,比如折叠动画,类似于 iPhone 上的Clear应用。
我已经尝试在我的ListView和它的项上调用getScrollY()getTop()(使用getChildAt(0).getTop),但所有这些都返回0。供参考,我的列表项高度相同。
我还尝试将onScrollListener添加到listview中,并仅计算ACTION_DOWN上的原始Y位置与ACTION_MOVE上的Y位置之间的差异,但似乎listview以较慢的速度滚动。
任何帮助都将是极好的。
3个回答

3

嗨Bo,这很有趣,我曾经覆盖了那个方法并认为它是无用的,因为scrollY总是为0 - 如果我有机会,我会看一下deltaY参数;顺便说一句,我使用上面的链接创建了一个自定义列表视图,并取得了巨大的成功,我打算将其发布到git上,也许写一篇简短的博客文章,我会在这里链接回来。谢谢。 - Crwydryn

2
经过大量的挖掘和更多的挫败,答案似乎是你不能。更令人恼火的是,我看了一下Android源代码,并可以看到我需要的代码都很好地隐藏在AbsListView的内部部件中。但并非一切都失去了。似乎你可以使用AbsListView作为指南构建自己的视图,并在其中执行所需的操作。虽然比我想象的要冗长,但没关系。我还发现了一个关于如何构建自己的视图的不错的教程,在其中你可以做任何想做的事情。
编辑
最终,我在Github上有一个演示版本正在运行。如果你感兴趣,可以在这里找到它。当你从顶部向下拉时,一个新的视图将旋转进入,如果你松开或向上滚动,视图将旋转出去。

-2

一开始我以为可以在onOverScrolled()方法中获取超出滚动距离,但是在onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY)方法中,scrollX的值只能是0或者maxOverScrollDistence。

所以在那里无法获取超出滚动距离。

但是你可以在以下方法中获取:

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

例如,如果你的ScrollView垂直滚动,则可以按如下方式获取:

if(deltaY+scrollY<0) {overscrollDistance = deltaY+scrollY}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接