2013-03-02 1 views
4

4.0 버전 이하의 장치에서 완벽하게 실행되는 응용 프로그램을 만들었거나 ICS를 말할 수는 있지만 위의 코드는 제대로 작동하지 않습니다. 내 응용 프로그램에서는 두 개의 버튼으로 동시에 멀티 터치를 만들려고했는데 버전 4.0 이하에서 완벽하게 작동했습니다. action_mask의 값은 터치 및 오프 터치시 6 번째 5입니다. 4.0 이상 버전에서는 1, 2, 0입니다. 이 이유는 무엇입니까? 대신android - 다른 장치에 다른 Action_mask 값이있는 이유

if(actionResolved == 5); 

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

그냥 대신 열거 형 상수를 사용하고 당신이 그것에 대해 걱정할 필요가 없습니다 내 코드입니다. 예 : MotionEvent.ACTION_POINTER_2_DOWN – Simon

+1

실제로 특정 작업을 수행하기 위해 action_mask 값을 사용하고 있습니다. 왜냐하면 action_pointer_down이 설명서에서 말하는 것처럼 작동하지 않기 때문입니다. 다른 터치 이벤트에서 다른 작업을 수행하는 다른 방법이 있습니까? –

+0

그런 다음 코드를 게시하고 문서에 따라 올바르게 작동하지 않는 방법을 정확하게 설명하십시오. 나는 게임을 추측하는 것을 즐긴다. – Simon

답변

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; 
} 
0

사용

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

+1

ACTION_POINTER_1_DOWN에 저장하는 것은 더 이상 사용되지 않으며 위의 코드는 변경 사항 적용 후 작동하지 않습니다. –

+0

사용하지 않는 것이 좋습니다. 문서를 읽으면 현재 지원되는 모든 상수가 표시됩니다. – Simon