Android中的连续触摸事件

Android中的连续触摸事件,android,touch,move,Android,Touch,Move,我有4个活动按钮。我已经为所有按钮设置了触控监听器 Button1.setOnTouchListener(this); Button2.setOnTouchListener(this); Button3.setOnTouchListener(this); Button4.setOnTouchListener(this); 我想做的就是当我将手指移动到按钮上时,按下MotionEvent.ACTION\u和MotionEvent.ACTION\u 当我触摸单个按钮时,我会得到这些事件,但当我将手

我有4个活动按钮。我已经为所有按钮设置了触控监听器

Button1.setOnTouchListener(this);
Button2.setOnTouchListener(this);
Button3.setOnTouchListener(this);
Button4.setOnTouchListener(this);
我想做的就是当我将手指移动到按钮上时,按下
MotionEvent.ACTION\u
MotionEvent.ACTION\u

当我触摸单个按钮时,我会得到这些事件,但当我将手指从一个按钮移动到另一个按钮时,我不会得到这些事件。

在这种情况下,第一个按钮应该得到ACTION\u UP消息,下一个按钮应该得到ACTION\u DOWN消息


请帮忙。

touchevents的这种行为有一定的逻辑


我认为您最好的决定是将
OnTouchListener
设置为Button1、Button2等的父视图,或者重写其
OnTouchEvent()
方法。之后,您将能够在必要时手动将
MotionEvent
发送到子视图(您案例中的按钮)。

我最初的直觉是,您将所有触摸事件发送到同一个功能,从而导致某种类型的瓶颈

如果你把触摸处理程序分成四个不同的功能,像这样,所有的按钮都有独立的触摸处理程序,并且通过让它们都使用相同的功能来处理它们的集体事件,没有冲突。为每个按钮单独制作一个“onTouchEventListener”,并使其看起来如下所示:

Button1.setOnTouchListener(button1Listener);
Button2.setOnTouchListener(button2Listener);
Button3.setOnTouchListener(button3Listener);
Button4.setOnTouchListener(button4Listener);
以下是如何从Android文档中执行此操作:

// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
    public void onClick(View v) {
       // do something when the button is clicked
    }
};

protected void onCreate(Bundle savedValues) {
    ...
    // Capture our button from layout
    Button button = (Button)findViewById(R.id.corky);
    // Register the onClick listener with the implementation above
    button.setOnClickListener(mCorkyListener);
   ...
}

由于您试图捕获涉及所有按钮的MotionEvent,而不是仅捕获一个按钮,因此必须在父视图中捕获MotionEvents,然后以MotionEvent.ACTION\u DOWN和MotionEvent.ACTION\u UP的形式将它们分派给子按钮

我做了一些类似的事情,用一个包含许多按钮的相对物来制作一个多点触控键盘。我基本上覆盖了
dispatchTouchEvent
,并跟踪每个手指,向儿童发送ACITON\u DOWN和ACTION\u UP,而不是次指的ACTION\u POINTER\u DOWN和ACTION\u POINTER\u UP


查看ViewGroup的,了解它如何将事件分派给其子级,并调整行为以检查手指何时超出子按钮边界,如果是这样,在旧按钮上向上发送操作,然后在新按钮上向下发送操作。

您是否尝试过获取操作移动、操作外部或操作取消消息?也许它会帮助你。是的,我也检查了上述事件,但问题是,按钮似乎抓住了所有的触摸信息,直到我释放它。因此,即使我将手指移到按钮外,也会得到按钮的移动事件。此外,如果我从任何按钮外部启动触摸,按钮不会获得触摸事件,即使手指在按钮上。这似乎不起作用,因为如果从按钮外部启动触摸,即使一个按钮也不会获得触摸消息。是的,我之前曾想过在父视图中侦听触摸事件的这种方法。但是我想,如果触摸事件超出边界,应该有一些设置或标志来离开触摸事件。我正在考虑将事件发送给家长作为最后一个选项。是的,我之前考虑过在家长视图中收听触摸事件的方法。但是我想,如果触摸事件超出边界,应该有一些设置或标志来离开触摸事件。我正在考虑将事件发送给家长作为最后一个选项。我认为这不是我们的“肮脏”决定,因为MotionEvents是从家长发送给孩子的等等。我们需要改变父母的行为。此外,请注意: