【问题标题】:Dragging across an android button拖过一个 android 按钮
【发布时间】:2011-05-28 15:29:51
【问题描述】:

我希望一个 android 按钮在用户拖动它并在其上释放手指时触发,除了标准激活(如果单击并释放它)。

我尝试使用 ACTION_MOVE MotionEvent,但此事件仅在 ACTION_DOWN 和 ACTION_UP 事件之间触发。我也认为 ACTION_OUTSIDE 可能是一个解决方案。有没有办法做到这一点?

这是我的代码,去掉了所采取的操作(b 是一个按钮):

b.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {

                if (event.getAction()== MotionEvent.ACTION_DOWN){
                    //Tiggers correctly
                } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
                    //Triggers correctly between events, but not when the finger is dragged ontop outside of the element
                } else if (event.getAction() == MotionEvent.ACTION_OUTSIDE){
                    //Can't get this to trigger in any case but I think it might be the solution
                } else if (event.getAction() == MotionEvent.ACTION_UP){
                    //Triggers correctly
                }
                }
                return false;
            }
        });

【问题讨论】:

    标签: android


    【解决方案1】:

    只有当你的触摸区域被 ViewRoot 扩展时,才能触发 ACTION_OUTSIDE。

    如果您考虑拖动,则有 2 个选项,但对于这两个选项,您都可以检测矩形,您的按钮位于屏幕 View.getHitRect(Rect) 上的位置,然后根据这些知识,您可以决定 MotionEvent 是否在里面矩形与否。

    否则,您可以创建 DragLayer 并在那里实现所有逻辑。

    【讨论】:

    • 谢谢,我试试看。我不明白你所说的“由 ViewRoot 扩展”是什么意思,你是想说 ACTION_OUTSIDE 是 Android 内部使用的东西,框架的用户不应该使用吗?
    • 有一个方法可以让你的View拥有比实际尺寸更大的Touch area。实际上,该事件并不意味着您移动到命中矩形之外。
    • 好吧,我猜有点像在你的视图的“边缘”移动。
    【解决方案2】:

    您可能想尝试一下手势侦听器。关于如何使用它有一个相当好的描述here

    您似乎需要扩展 Button 并添加手势检测的可能性才能完成此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多