【问题标题】:How to detect draglike behavior without ACTION_DOWN and ACTION_UP如何在没有 ACTION_DOWN 和 ACTION_UP 的情况下检测类似拖动的行为
【发布时间】:2012-05-28 20:35:48
【问题描述】:

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

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

我想使用 onInterceptTouchEvent 不好。毕竟,B 不是 A 的父母。反之亦然。

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

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

检测视图 A 的 ACTION_DOWN 及其子视图 B(或其子视图)的 ACTION_UP 的最佳方法是什么?

或者还有其他方法可以检测这些事件吗?

【问题讨论】:

    标签: java android


    【解决方案1】:

    我确实为非常相似的事情挣扎了一两天,最后我得出结论,据我所知 onInterceptTouchEvent 是唯一的方法。我刚刚为 A 和 B 创建了一个容器视图“C”,然后当 A 收到 ACTION_DOWN 时,我指示“C”拦截滑动中的所有进一步事件,针对 B 的已知位置测试坐标,然后将事件转发到如果 ACTION_UP 对 B 的边界测试为阳性,则通过自定义方法“B”(小心手动将 MotionEvents 从一个类传递到另一个类,因为坐标会全错)。

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

    另外,以防万一您使用它,android 3.0+ 有一些拖放辅助方法,我确信它们非常有用,尽管我正在为 2.x 开发,所以它们对我来说毫无用处。

    【讨论】:

    • 谢谢。我会考虑你的解决方案。我还没有决定要使用什么 minSdkVersion。 (我在下载和安装 SDK 以及让模拟器运行时遇到了一些麻烦。所以我正在通过手机上的 USB 测试我的应用程序,最低 SDK 15!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多