2012-07-05 89 views
6

文档说这有关:Android的 - 如何处理两个手指触摸

手势与ACTION_DOWN运动事件提供 第一指针的位置下来开始。由于每个额外的指针 发生故障,框架将相应地生成一个动作事件,其中包括ACTION_POINTER_DOWN或ACTION_POINTER_UP。

,所以我必须做的onTouchEvent功能的覆盖在我的活动:

@Override 
public boolean onTouchEvent(MotionEvent MEvent) 
{ 

    motionaction = MEvent.getAction(); 

    if(motionaction == MotionEvent.ACTION_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER1 " + MEvent.getActionIndex()); 
    } 

    if(motionaction == MotionEvent.ACTION_POINTER_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER2 " + MEvent.getActionIndex()); 
    } 

} 

不幸的是,第二如果从来没有进入。该活动包含2 2视图与2 OnTouchListener,我知道onTouchEvent只有当活动的视图不消耗事件,所以我试图在侦听器中返回false,并以这种方式我只能识别第一手指触摸,但这样可以避免收听者收到ACTION_UP事件,并且不允许我识别第二手指触摸。我也尝试在侦听器中返回true,但是在手动调用onTouchEvent函数之后,这只允许我只识别第一个手指触摸。

我的代码有什么问题?

回答

15

我相信你的代码缺少屏蔽操作,如:

switch (motionaction & MotionEvent.ACTION_MASK) { 
case MotionEvent.ACTION_POINTER_DOWN: 
} 

此代码应能检查ACTION_POINTER_DOWN。

祝你好运&告诉我们会发生什么。

Tommy Kwee

+0

是的,这是问题所在。用ACTION_MASK添加'和'解决了这个问题。让我生气的是,官方文件中对此没有提及。 – Bemipefe 2012-07-07 10:42:10

+0

伯尼菲,我为你感到先生。任何人都可以在文档中犯错误。这可能是一个常见的错误,因为有时你不需要掩盖。我下次的唯一建议是使用调试器来查看传入的值,并查看是否有任何值是您的预期值。祝你好运,另一个Android粉丝! – 2012-07-07 17:15:21

+0

我可以抓住ACTION_POINTER_UP和ACTION_POINTER_DOWN,但我找不到如何抓住ACTION_MOVE。我可以在视图监听器中以单指模式抓取它,但是当我将第二根手指放在屏幕上时,我可以从onTouchEvent方法中唯一指出的是UP和DOWN,而不是MOVE动作。如何解决它? – Bemipefe 2012-07-15 17:17:18