android - 为什么不同的设备有不同的Action_mask值

时间:2013-03-02 06:27:33

标签: android multi-touch

我已经制作了一个应用程序,它在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;         
}

2 个答案:

答案 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