0

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

代码的基本目标是让多个触摸交互做不同的事情:

  1. 短按做一件事
  2. 长按做另一个
  3. 垂直方向的触摸拖动和释放是另一回事
  4. 在水平方向上触摸拖动另一个

等等,尽可能多的不同的东西。

也许我应该只拥有一个用于触摸而不是两个的 View,并且有一种方法可以将触摸和运动事件分开。我知道如何区分短按和长按事件,但运动事件会搞砸。

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

4

1 回答 1

0

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

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

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

至于您的第二个问题 - 是的,您当然可以创建一个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 ...
        } 
    }
}

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

于 2013-03-29T17:52:51.447 回答