我已经制作了一个应用程序,它在4.0以下的设备上运行得非常好,或者我们可以说ics,但是上面的它不能正常工作。 在我的应用程序中,我试图同时在两个按钮上进行多点触控,它在4.0以下工作完美。 action_mask的值在触摸和触摸时是6和5 ..而在4.0以上的版本中它的1,2,0。 为什么这个?
enter code here
@override
public boolean ontouch(Event ev , MotionEvent event)
{
int actionResolved = event.getAction() & MotionEvent.ACTION_MASK;
int action = paramMotionEvent.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK;
// int actionShift = paramMotionEvent.getAction() & MotionEvent.ACTION_POINTER_INDEX_SHIFT;
Log.i("fil", "action resolved" +actionResolved);
if(i==MotionEvent.ACTION_DOWN)
{
Log.i("fil", "action down");
Log.i("fil", "action down value" +MotionEvent.ACTION_DOWN);
}
if(actionResolved == 5);
{
Log.i("fil", "action resolved" +actionResolved);
scannerview1.startAnimation(anim1);
scannerView2.startAnimation(anim1);
}
if(actionResolved ==6)
{
scannerView2.clearAnimation();
scannerview1.clearAnimation();
}
return true;
}
答案 0 :(得分:1)
我通过在操作中使用指针ID解决了上述问题。 但此代码在版本4.0以下不可用
这是我的代码
@override
public boolean ontouch(Event ev , MotionEvent event)
{
switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
Log.i("D3", "pid" +event.getPointerId(0));
//Log.i("D3", "pid" +event.getPointerId(1));
if(event.getPointerId(0)==0){
}
if(event.getPointerId(0)==1)
{
scannerview1.startAnimation(anim1);
scannerView2.startAnimation(anim1);
}
break;
case MotionEvent.ACTION_UP:
scannerView2.clearAnimation();
scannerview1.clearAnimation();
break;
}
return true;
}
答案 1 :(得分:0)
而不是
if(actionResolved == 5);
使用
if(actionResolved == ACTION_POINTER_1_DOWN);
常量值可能会在API版本之间发生变化。
另请注意,MotionEvent.ACTION_MASK
已弃用。您应该使用'MotionEvent.ACTION_POINTER_INDEX_MASK'。
http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_POINTER_INDEX_MASK