您好我想将触摸事件传递给父母,只有当触摸移动时,当用户点击我想在孩子中处理它时,我才在孩子中尝试这个:
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出现的时候,我不知道我是否会处理它
答案 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_MOVE
和ACTION_UP
个事件串。 这是因为ACTION_DOWN是所有触摸的起点 事件