如何在没有ACTION_DOWN和ACTION_UP的情况下检测拖拽行为

时间:2012-05-28 20:35:49

标签: java android

我的问题关注onTouch。据我所知,没有办法检测一个视图的ACTION_DOWN,而是在同一个onTouch事件或滑动时检测另一个视图的ACTION_UP,因为每个onTouch事件都链接到一个视图。

我有一个带有一些图形的视图(A),并且在EVENT_DOWN中检测到坐标并制作一个“弹出窗口”,其中包含一个视图(B),它拥有更多视图(“按钮”)。 B的位置和大小可能会不时变化。我宁愿在B的一个孩子(“按钮”)上检测到ACTION_UP。

我猜使用onInterceptTouchEvent并不好。毕竟,B不是A的父母。它的另一种方式。

使用androids拖放功能似乎有点太多了。看起来它的目的是实际拖动图形和传输数据。拖动不可见的图形以检测离开屏幕的手指不是很优雅。

另一种方法是在每次弹出窗口时检测B的孩子的位置(和大小),但这也不是很顺利。

检测视图A的ACTION_DOWN,然后是其子B(或它的子节点)ACTION_UP的最佳方法是什么?

还有其他方法来检测这些事件吗?

1 个答案:

答案 0 :(得分:0)

我在一两天之内确实遇到过非常相似的事情,我最后得出的结论是,据我所知onInterceptTouchEvent是唯一可行的方法。我刚为A和B创建了一个容器视图'C',然后当A接收到ACTION_DOWN时,我指示'C'拦截滑动中的所有其他事件,测试B对已知位置的坐标,然后将事件转发给如果ACTION_UP对B的边界测试为正,则通过自定义方法'B'(小心手动将MotionEvents从一个类传递到另一个类,因为坐标将全部错误)。

这不是一个非常令人满意的解决方案,但这是我唯一能想到的事情。

另外,如果你正在使用它,android 3.0+有一些拖放帮助方法,我肯定是非常有帮助的,虽然我正在开发2.x因此它们对我没用。