2012-09-08 2 views
3

이동하면 소리를 기반으로하는 간단한 프로그램을 시험 중입니다. 그래서 처음에는 소리가 나는 1을 연주하고 그 다음부터는 소리를내는 모든 동작을합니다. 카운트 4에서 나는 처음부터 플레이하도록 만들었다.Motionevent Action_MOVE는 이동하지 않아도 X와 Y를 계속 실행합니다.

여기에 문제가 있습니다. 손가락을 움직이지 않고 같은 위치에두면 소리는 여전히 1 씩 1 씩 유지됩니다. x 및 y 값 실행을 파악합니다. 이걸 어떻게 멈추게합니까 ??

OnTouchListener MyOnTouchListener= new OnTouchListener() 
{ 
public boolean onTouch(View view, MotionEvent event) 
    { 
    switch(event.getAction() & MotionEvent.ACTION_MASK) 
     { 

     case MotionEvent.ACTION_DOWN: 
      x = (int) event.getX(); 
      y = (int) event.getY();  
      oldval = x+y; 
      break; 

    case MotionEvent.ACTION_MOVE: 
     { 
      Log.e("X value", "X is "+x); 
      Log.e("Y value", "Y is "+y); 
     try 
      { 
       Thread.sleep(500); 
      } catch (InterruptedException e) { 
      } 

      int newval= (int) (event.getX() + event.getY()); 

      if(Math.abs(oldval-newval)>50) 
      { 

       Log.e("First", "next button"); 
       longpressCount++; 
       if(longpressCount==1) 
       { 
        Log.e("1", "BUTTON PRESSED"); 
       } 
       else if(longpressCount==2) 
       { 
        Log.e("2", "BUTTON PRESSED"); 
       } 
       else if(longpressCount==3) 
       { 
        Log.e("3", "BUTTON PRESSED"); 
       } 
       else if(longpressCount==4) 
       { 
        Log.e("4", "BUTTON PRESSED"); 
        longpressCount = 0; 
       } 

      } 

      break; 
     } 
     } 
     return true; 
    } 

답변

9

무브는 매우 민감하며 손가락이 내려져있는 한 계속 전화가 걸립니다. 사운드 재생 코드의 끝에서 이전 값을 설정하면 해당 지점에서 다른 50 개의 거리만큼 이동 한 경우에만 재생됩니다.

이와 비슷한 것.

OnTouchListener MyOnTouchListener= new OnTouchListener() 
{ 
public boolean onTouch(View view, MotionEvent event) 
    { 
    switch(event.getAction() & MotionEvent.ACTION_MASK) 
     { 

     case MotionEvent.ACTION_DOWN: 
      x = (int) event.getX(); 
      y = (int) event.getY();  
      oldval = x+y; 
      break; 

    case MotionEvent.ACTION_MOVE: 
     { 
      Log.e("X value", "X is "+x); 
      Log.e("Y value", "Y is "+y); 
     try 
      { 
       Thread.sleep(500); 
      } catch (InterruptedException e) { 
      } 

      int newval= (int) (event.getX() + event.getY()); 

      if(Math.abs(oldval-newval)>50) 
      { 

       Log.e("First", "next button"); 
       longpressCount++; 
       if(longpressCount==1) 
       { 
        Log.e("1", "BUTTON PRESSED"); 
       } 
       else if(longpressCount==2) 
       { 
        Log.e("2", "BUTTON PRESSED"); 
       } 
       else if(longpressCount==3) 
       { 
        Log.e("3", "BUTTON PRESSED"); 
       } 
       else if(longpressCount==4) 
       { 
        Log.e("4", "BUTTON PRESSED"); 
        longpressCount = 0; 
       } 
       oldval = event.getX() + event.getY(); 
      } 

      break; 
     } 
     } 
     return true; 
    } 
+0

감사합니다. Ty S는 감사하지만 이전 값을 어떻게 설정합니까? X와 Y의 옛 가치에 대해 이야기하고 있습니까? – TheDevMan

+0

줄을 추가하여 편집 중입니다. – tsmith

+0

감사합니다. Ty. S.이 작품 - 그냥 50 이상의 가치가 작동하지만 위의 내 논리를 사용하여 알아 냈지만 문제는 내가 위에서 아래로 스크롤 - 소리가 모두 재생됩니다 - 대신 하나의 소리를 재생하는 것입니다. 카운트는 항상 1을 더합니다 - 따라서 사운드가 나타납니다? 여기에 무슨 문제가 있다고 생각하니? – TheDevMan

관련 문제