6

有没有办法确定用户overscrolled在 Android ListView 中的确切像素数?当用户试图向上滚动超过第一个列表项,并且过度滚动/反弹动画开始时,我需要检测过度滚动距离。基本上我会在那个空间做一些事情,比如动画中的折叠,类似于iPhone上的Clear应用程序。

我已经尝试在我的 ListView 及其项目(使用)上调用getScrollY()和,但一切都返回 0。作为参考,我的列表项目都是相同的高度。getTop()getChildAt(0).getTop

我还尝试在 中添加一个onScrollListener并计算原始 Y pos on和 Y pos listviewon 之间的差异,但似乎滚动速度较慢。ACTION_DOWNACTION_MOVElistview

任何帮助都会很棒。

4

3 回答 3

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 以获取用户过度滚动的程度。

于 2013-10-29T14:18:14.903 回答
2

经过大量挖掘,甚至更加沮丧,答案似乎是你不能。更烦人的是,我查看了 Android源代码,可以看到我需要的代码都很好地隐藏在 AbsListView 的内部 gubbings 中。但一切都没有丢失。似乎您可以使用 AbsListView 作为指南构建自己的视图,并在其中执行您需要的操作。它比我想要的更冗长,但就这样吧。我还找到了一个关于如何构建自己的视图的不错的教程,您可以在其中做任何您想做的事情。

编辑

我终于在 Github 上启动并运行了一个演示。如果你有兴趣,你可以在这里找到。当您从顶部下拉时,新视图将旋转进来,如果您松开或向上滚动,视图将旋转出去。

于 2013-09-18T19:43:31.453 回答
-2

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

scrollX 为 0 或 maxOverScrollDistence。

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

但你可以在

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

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

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

于 2016-02-04T13:36:17.753 回答