我对触摸事件的遮罩有一些小问题。我在这里和其他地方阅读了很多内容,但仍然对部分内容有些困惑。Android多点触控和getActionMasked()
1)是event.getActionMasked()
一样event.getAction() & MotionEvent.ACTION_MASK
(他们似乎是三星S2和HTC Desire的)
2)将以上两个命令给所有的信息和更重要的是event.getAction()
单独会,或者是不同的。 3)我已经写了一段代码,它简单地说明哪里正在触摸,哪个pointerId,或者如果指针没有被使用(此时只写两次触摸)。它似乎可以在上面提到的设备上正常工作,但是我知道如果某些设备不完全正确,某些设备的行为可能会非常不同。因此,我想知道以下内容是否正确,并且会在所有设备上运行。
boolean pointer0down=false, pointer1down=false;
String st="", str0 ="", str1 ="";
public boolean onTouchEvent(MotionEvent event)
{
if (event.getActionMasked()==MotionEvent.ACTION_UP
||event.getActionMasked()==MotionEvent.ACTION_POINTER_UP
||event.getActionMasked()==MotionEvent.ACTION_CANCEL)
{
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==0)
pointer0down=false;
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==1)
pointer1down=false;
}
if (event.getActionMasked()==MotionEvent.ACTION_DOWN
||event.getActionMasked()==MotionEvent.ACTION_POINTER_DOWN)
{
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==0)
pointer0down=true;
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==1)
pointer1down=true;
}
if (pointer0down)
str0="\tx: " + event.getX(0) + "\ty: "+event.getY(0);
else
str0="\tNot down";
if (pointer1down)
str1="\tx: " + event.getX(1) + "\ty: "+event.getY(1);
else
str1="\tNot down";
st="pointer0:"+str0+"\npointer1:"+str1;
return true;
}
很好的解释! – George