Android中的连续触摸事件
我有4个活动按钮。我已经为所有按钮设置了触控监听器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 当我触摸单个按钮时,我会得到这些事件,但当我将手
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是从家长发送给孩子的等等。我们需要改变父母的行为。此外,请注意: