【问题标题】:How do I differentiate between MotionEvent.ACTION_UP and dragging a finger off-screen in Android?如何区分 MotionEvent.ACTION_UP 和在 Android 中将手指拖出屏幕?
【发布时间】:2012-10-10 00:05:14
【问题描述】:

我的应用程序是一个边到边的按钮网格。我正在覆盖所有触摸和运动事件并手动控制行为。一切正常,除了手指被拖出屏幕外。 MotionEvent.ACTION_UP 被触发,我不希望这样。我尝试使用 getRawX() 和 getRawY() 来确定(例如,对于顶部和左侧边缘)坐标是否

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
    case (MotionEvent.ACTION_DOWN):
        Log.i(classID, "action down");
        return true;
    case (MotionEvent.ACTION_CANCEL):
        Log.i(classID, "action cancel");
        // never called
        return true;
    case (MotionEvent.ACTION_MOVE):
        Log.i(classID, "action move");
        return true;
    case (MotionEvent.ACTION_UP):
        Log.i(classID, "action up");
        Log.i(classID, "position: " + (int)event.getRawX() + "/" + (int)event.getRawY());
        return true;
    }
    return false;
}

【问题讨论】:

  • “屏幕外”是什么意思,就像从字面上拖动手指直到它从手机上掉下来一样?或者就在您特定小部件的矩形之外?我不确定为什么 Android 会根据您的手指离开手机时的移动方向报告不同的事件。我很好奇你为什么需要这个?
  • 我的意思是拖动手指直到它超出屏幕范围。实际上,要告诉您我的应用程序做了什么,实际上需要很长的描述,但它涉及到用户在查看计算机上的视觉反馈时在屏幕上按下/滑动。因此,用户可能会拖开手指,如果发生这种情况,我不希望触发任何事情。

标签: android gesture touchscreen motionevent


【解决方案1】:

两者在物理上或逻辑上没有区别(手指从屏幕上掉下来并抬起手指)。当您的手指离开屏幕时,您已经“抬起”,或者更准确地说,是您的手指从屏幕上移开。 MotionEvent.ACTION_UP 是任何导致没有触摸输入数据提供给系统的运动事件的占位符。

如果您希望解决此问题,您可以创建父视图和子视图。如果触摸从子视图“解除”但仍在父视图中,则手指仍在设备上但超出范围。

【讨论】:

  • 感谢您的回复。我想,由于整个显示器是RelativeLayout的子类,我可以在按钮网格周围放置一个5 px(左右)的边框,并检测手指何时不再在按钮上。用户应该将手指拖出屏幕以取消操作,因此该边框可能是“取消区域”。
  • @ultra 本质上。我就是这样做的。
【解决方案2】:

他说手指离开屏幕和手指滑出你的边框之间“没有物理上的区别”视图不正确。

您可以通过在屏幕中间放置一个 SurfaceView 来证明这一点,并在 OnTouch 事件回调中放置一个 IF语句如:

if (event.getEvent() == MotionEvent.ACTION_UP) {
         Log.d("derp", "finger has lifted up");
}

您会发现,如果您的手指只是超出了边界,它实际上并没有报告。虽然有一个 MotionEvent.ACTION_OUTSIDE,但我似乎无法让它工作。因此,我也在这里寻找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多