Android在没有ACTION_DOWN的情况下获得ACTION_UP

时间:2014-12-16 09:39:03

标签: android touch

您好我想将触摸事件传递给父母,只有当触摸移动时,当用户点击我想在孩子中处理它时,我才在孩子中尝试这个:

private boolean moved = false;
@Override
public boolean onTouchEvent(MotionEvent event)
{
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        super.onTouchEvent(event);
        moved = false;
        return false;
    }
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        moved = true;
        return false;
    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        return !moved;
    }
    return true;
}

但是当我在ACTION_DOWN上返回false时,我没有得到ACTION_UP

在ACTION_DOWN出现的时候,我不知道我是否会处理它

3 个答案:

答案 0 :(得分:0)

"如果从ACTION_DOWN事件返回true,则您对该手势中的其余事件感兴趣。 A"手势"在这种情况下意味着所有事件,直到最后的ACTION_UP或ACTION_CANCEL。从ACTION_DOWN返回false意味着您不希望事件和其他视图有机会处理它。如果您有重叠的视图,这可以是兄弟视图。如果不是,它会冒泡到父母那里。" - What is meaning of boolean value returned from an event-handling method in Android

答案 1 :(得分:0)

当您返回false时,您不会消耗触摸事件并将其传递给父母(如果您通过实验发现,您可以继续执行此操作)是的 - 您负责处理。

所以试试这个

    private boolean moved = false;
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // CALL YOUR PARENT onTouch() IF YOU NEED TO
            moved = false;
        }

        else if (event.getAction() == MotionEvent.ACTION_MOVE)
            moved = true;

        else if (event.getAction() == MotionEvent.ACTION_UP)
            return !moved;

        return true;
    }

答案 2 :(得分:0)

根据this官方Android开发者网站链接(阅读Capturing touch events for a single view部分)

  

小心创建一个为其返回false的侦听器   ACTION_DOWN事件。如果这样做,则不会调用侦听器   对于后续ACTION_MOVEACTION_UP个事件串。   这是因为ACTION_DOWN是所有触摸的起点   事件