【问题标题】:How to detect if finger already over the button on start new Activity如何检测手指是否已经在开始新活动的按钮上
【发布时间】:2012-11-26 10:03:45
【问题描述】:

场景是例如用户长按Activity A。 lonkclick 上的Activity A 启动Activity B,而用户没有抬起手指。 Activity B 应该检测到用户仍在触摸屏幕。

我试图通过...实现它

活动 A

ButtonA.setOnLongClickListener(new OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            startActivityForResult(new Intent(ActivityA.this, ActivityB.class), REQUEST_1);
            return true;
        }
    });

活动 B...

ButtonB.setOnTouchListener(new OnTouchListener() {
        int oldEvent = -1;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (oldEvent != event.getAction()) {
                oldEvent = event.getAction();
                Toast.makeText(ActivityB.this, event.getAction() + "", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    });

例如,ButtonA 和 ButtonB 在屏幕上的相同位置。绝对/

但是当 ActivityB 启动时,ButtonB 没有事件。既不是 ACTION_DOWN,也不是 ACTION_UP,没有其他。通常我想在 ButtonB 上收到 ACTION_UP :-)

【问题讨论】:

    标签: android events android-layout touch


    【解决方案1】:

    如果在您开始活动时手指已经在屏幕上,您将不会获得 ACTION_DOWN。你也不会得到 ACTION_UP,因为还没有 ACTION_DOWN。也许你有自己的理由这样做,但一般用户应该能够取消操作,因此按钮应该在点击时做出反应(在同一个对象上向下然后向上)。如果动作发生在 DOWN 上,那么用户就无法取消它(即通过将手指移到对象外并抬起它)。

    【讨论】:

    • 如果我对 OP 的理解正确,按钮是在单独的活动中
    • 通常在这些按钮中并不重要。当用户抬起手指时,我想在 ActivityB 中接收事件或其他内容。
    • 但同样 - 要获得 ACTION_UP,您首先需要 ACTION_DOWN。
    • 您是否 100% 确定如果在启动 activityB 时用户抬起手指(手指)已经在屏幕上,则无法检测到 activityB?
    【解决方案2】:

    任务使用 FragmentActivity 解决。

    【讨论】:

    • 您能否更详细地解释一下该问题的解决方案?因为仅仅扩展 FragmentActivity 并不能解决任何问题。
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 2011-05-10
    • 1970-01-01
    • 2010-09-24
    • 2014-01-26
    • 2011-09-09
    相关资源
    最近更新 更多