【问题标题】:How to detect if touch is released on top of custom Android view?如何检测是否在自定义 Android 视图之上释放了触摸?
【发布时间】:2015-01-09 03:10:35
【问题描述】:

当我的视图处于按下状态并且触摸事件的位置离开视图时,我希望视图得到通知。我还想在触摸位置在仍处于按下状态时重新进入我的视图时收到通知。

我的视图扩展了View,目前实现了这个方法:

public boolean onTouchEvent(MotionEvent event) {
    boolean result = gestureDetector.onTouchEvent(event);
    if (!result) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            animate().scaleX(1).scaleY(1).setDuration(100).start();
            performClick();
        }
    }
    return result;
}

gestureDetector 引用该类的一个实例:

class GestureListener extends GestureDetector.SimpleOnGestureListener {
    public boolean onDown(MotionEvent e) {
        animate().scaleX(0.9f).scaleY(0.9f).setDuration(100).start();
        return true;
    }
}

这工作得很好,但是当在我的视野之外按下并释放触摸时,MotionEvent.ACTION_UP 仍然会被触发(因此performClick() 也会被触发),这不是我正在寻找的行为。我在MotionEvent 中尝试了许多其他操作,但没有这样做。

有什么想法吗?

【问题讨论】:

    标签: android view gesture pressed


    【解决方案1】:

    更改 if 语句以包含按钮的尺寸

    boolean inX == event.getX() >= myButton.getX() && event.getX() <= myButton.getX()+myButton.getWidth();
    
    boolean inY == event.getY() >= myButton.getY() && event.getY() <= myButton.getY()+myButton.getWidth();
    
    if (event.getAction() == MotionEvent.ACTION_UP && inX && inY) {
           // do cool stuff
    

    【讨论】:

    • 所以你需要去那个“低水平”去做吗?有点奇怪,因为您认为这将是一件非常重要的事情。
    • 经过一番调查,我很确定这是正确的答案。谢谢!
    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多