触摸侦听器以查看重叠的视图

时间:2013-03-29 16:35:14

标签: android view touch motion

我想知道是否可以将Views放在彼此之上并为它们分开监听器。具体来说,我有两个视图完全坐在彼此之上,并且是完全相同的维度,我正在尝试为view_one实现一个运动事件OnTouchListener,为view_two实现一个OnLongPressListener。但是,view_one上的OnTouchListener似乎阻止了view_one的OnLongClickListener。

代码的基本目标是让多个触摸交互执行不同的操作:

  1. 短暂点击会做一件事
  2. 长按另一个
  3. 触摸垂直方向的拖动和释放是另一回事
  4. 按水平拖动另一个
  5. 等等,尽可能多的不同。

    也许我应该只有一个用于触摸而不是两个的视图,并且有一种方法可以分离出触摸和运动事件。我知道如何分开短期和长期的新闻事件,但动议事件会让事情变得混乱。

    我确信有更好的方法可以做到这一点。任何提示或建议都非常感谢。有没有办法限制滑动运动的长度和触摸持续时间,以帮助确定采取哪种动作?

1 个答案:

答案 0 :(得分:0)

要回答问题的第一部分 - 如果触摸侦听器在事件到达view_two(下方视图)之前消耗了该事件,则可能是因为您正在使用onTouchListener中的触摸事件。

//Returns true if the listener has consumed the event, false otherwise.
public abstract boolean onTouch (View v, MotionEvent event)

你总是在这种方法中返回假吗?如果不是,则有些事件可能不会传播到层次结构中的下一个视图。

关于你的第二个问题 - 是的,你当然可以创建一个onTouchListener来处理所有这些事件。这是一个短按和长按的例子(与运动量无关):

private MotionEvent downEvent;

public abstract boolean onTouch (View v, MotionEvent event){
    if (downEvent == null && event.getAction == MotionEvent.ACTION_DOWN){
        downEvent = event;
        return false;
    }


    if (event.getAction == MotionEvent.ACTION_UP){
        if (event.getDownTime() > LONG_PRESS_THRESHOLD){
            ... do something ...
        } else if (event.getDownTime() > SHORT_PRESS_THRESHOLD){
            ... do something else ...
        } 
    }
}

您可以想象,只需要更多努力线来确定您的下行事件和当前事件之间的增量X / delta Y是否满足您为事件3和4确定的阈值。

相关问题