如何实现Android ListView的打开手势

5
这是一个关于Android ListViews、手势和动画的开放性问题。 我对Android中的手势不太熟悉,所以我正在寻找一些想法和灵感。 以下是两个屏幕截图和一个视频,展示了我正在思考的效果。建议观看视频,非常值得一看。

enter image description here

enter image description here

这些截图来自一个iOS开源项目,可以在这里找到。
问题是,你如何实现一个“列表打开”手势,就像我在iPhone/iPad应用程序中越来越多地看到的那样,但适用于Android?
编辑1,想法1:
好的,第一个想法,据我所知,Pinch手势有点像拖动手势,所以我猜我们可以获取屏幕上两个手指的X和Y坐标?
接下来,这个问题的答案可能会有所帮助,基本思路是:
- 获取列表中第一个可见项的索引位置 - 获取列表中最后一个可见项的索引位置 - 从第一个索引到最后一个索引进行迭代,并使用getChildAt函数获取每个子项 - 对于每个子项,调用getLocationOnScreen方法以获取当前迭代项的坐标

之后,在循环内部可以对捏手势坐标和每个项目坐标进行比较,以获取新行必须插入的两个项目。

除了性能方面的考虑外,我认为这可能有效,但也许有更简单的方法来获得这两个项目(?)

下一个是谁?:)

更新:

感谢@rhlnair的提示,我借此机会告诉大家,我已经开始在我的业余时间里着手处理这个问题,欢迎任何人提供帮助。

该项目位于https://github.com/arnaudbos/Android-GestureListView。我在两个不同的分支上开始了两个不同的实现,并且希望任何人创建一个新分支。

在“attemp-via-scale-gesture-detector”分支中,我有一些非常鼓舞人心的东西,但是在ListView中有一些副作用。

加油!


看完视频后,这是一个惊人的问题... - Samir Mangroliya
2个回答

1

0

当进行“捏”手势时,您在屏幕上放置了两个手指,因此在这两个点的中间有一个点。这是简单的欧几里得算术,用于找到这个中间点。

然后,如您所说,找到该点位于列表中的元素。您提到了性能,我认为这不会成为问题。您正在迭代循环几次并询问坐标。在触摸事件上,我做得更糟糕。

如果捏合之间的点位于列表项中间,则创建上面的项目,反之则创建下面的项目。

请参阅底部使用比例监听器的部分: http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

使用比例监听器,您可以使用比例来判断是否创建新元素。 如果比例高于(您正在“缩小”)阈值,则创建新元素,并让视图从列表适配器重新填充。


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