【问题标题】:How to detect a touch event outside the activity border如何检测活动边界外的触摸事件
【发布时间】:2014-01-17 17:13:27
【问题描述】:

我的活动 A 超过了活动 B。活动 A 没有填满整个屏幕。(虽然它不是对话框活动)当在活动 A 边界外检测到触摸事件时,我想关闭活动 A。如何检测活动边框外的触摸事件?

@Override

public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
        Toast.makeText(getApplicationContext(), "Hi", 3000).show();

        return true;
    }

    return false;
}

此代码不起作用,因为它仅适用于对话活动。请帮助..提前谢谢:)

【问题讨论】:

  • Activity A 没有填满整个屏幕。(虽然它不是对话框活动)..那么它是什么.?..您可能没有使用全屏..但它占据了整个..你可以设置 x,y 限制如果超过你可以做这样的操作
  • @manmohan 活动不必填满整个屏幕。 ...我已填充活动以使其显示为对话框活动
  • 除了填充之外,您还可以将主题对话框用于活动。如果我认为如您所说,那么告诉任何其他活动或其他东西可以使用剩余空间。假设如果触摸超出活动范围,那么活动如何现在会得到它。为了让你更清楚,Windowmanager 会得到所有的 touchevent,因为它是整个 Display 的一个实例。

标签: java android android-layout view android-activity


【解决方案1】:

我不知道这是否有效,所以请测试一下 :)
但这应该很容易:

在活动A的onCreate()

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    //set us to non-modal, so that others can receive the outside touch events.
    getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL);

    //and watch for outside touch events too
    getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);

    //be sure to set the content view after setting those flags!!
    setContentView(R.layout.my_view);
}

现在您在正常的 `onTouch()' 中接收到触摸事件
只需检查它是否在外面(获取 x 和 y 并检查窗口的位置)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多