【问题标题】:Android - Element with Touch and Click events [closed]Android - 带有触摸和点击事件的元素[关闭]
【发布时间】:2023-03-08 07:45:01
【问题描述】:

当有诸如“点击”或键入“触摸”之类的操作时,我在尝试使元素做出不同响应时遇到问题。当我点击元素(是一个简单的监听器,不值得粘贴代码)时,它完美地执行了动作,但完全忽略了触摸的动作。这样我可以关联元素来区分这两个事件?

我应该将侦听器应用于执行操作的视图的子视图吗?

谢谢。

编辑

已解决!

在调用之前添加了对触摸事件使用的检查。

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    super.dispatchTouchEvent(event);
    if (this.onTouchEvent(event))
        return this.onTouchEvent(event);
    else
        return false;
}

【问题讨论】:

  • 大多数视图都有一个setOnTouchListener。你试过吗?
  • 是的,我试过了。但它也忽略了触摸事件,只监听了点击事件。
  • 确保你从onTouch方法返回true,否则你只会得到一个ACTION_DOWN事件。
  • 程序仍然忽略“触摸”事件。该方法通过拖动屏幕的任意角落来执行,除非按钮带有点击事件...:/

标签: java android events click touch


【解决方案1】:

您可以参考this 线程寻求帮助,或直接使用answer。 祝你好运=)

@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        // record the start time, start the timer
        mEventStartTime = ev.getEventTime();
        mHandler.postDelayed(mTask, LONG_PRESS_TIME);
    } else if (ev.getAction() == MotionEvent.ACTION_UP) {
        // record the end time, dont show if not long enough
        mEventEndTime = ev.getEventTime();
        if (mEventEndTime - mEventStartTime < LONG_PRESS_TIME) {
            mHandler.removeCallbacks(mTask);        
        }
    } else {
        // moving, panning, etc .. up to you whether you want to
        // count this as a long press - reset timing to start from now
                    mEventStartTime = ev.getEventTime();
        mHandler.removeCallbacks(mTask);
                    mHandler.postDelayed(mTask, LONG_PRESS_TIME);
    }

    return super.onTouchEvent(ev);
}

【讨论】:

  • 我理解你的代码。但是当我单击按钮(使用 OnClickListener)时,程序不执行该方法。
  • 你能发布整个课程吗?我怀疑你的听众是在课堂上而不是按钮上设置的
猜你喜欢
  • 2023-03-27
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2014-09-04
相关资源
最近更新 更多