2013-07-29 1 views
1

나는 자유로운 핸드로 낙서를하고있는 캔버스 화면이 있습니다. 내가 뭘 하려는지 사용자가 무언가를 낙서 후 손가락을 들어 올리면 ACTION_UP 이벤트가 호출됩니다. 내 요구 사항은 사용자가 낙서를 한 것을 알고, 낙서를 마친 후에 내 행동을 취할 것입니다.스레드 사이에서 MotionEvent ACTION_DOWN을 호출하는 것은 잠 들어 있습니다.

ACTION_UP 이벤트에서 이것을 달성하려면 3 초 동안 새 스레드를 만들고 있는데 스레드가 잠 들어있을 때 3 초 동안 사용자가 화면에서 다시 낙서를 시작하면 ACTION_DOWN 이벤트에 전화하기를 원합니다.

나는 이것을 할 방법이 없습니다. 코드는 아래에 언급되어 있습니다. 도와주세요.

public boolean onTouchEvent(MotionEvent event) { 
      float eventX = event.getX(); 
      float eventY = event.getY(); 

      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       path.moveTo(eventX, eventY); 
       return true; 
      case MotionEvent.ACTION_MOVE: 
       path.lineTo(eventX, eventY); 
       break; 
      case MotionEvent.ACTION_UP: 

    thread = new Thread() { 
        int wait = 0; 
        @Override 
        public void run() { 
         super.run(); 
         while (wait < 3000) { 
          try { 
           sleep(100); 
           wait += 100; 

          } catch (InterruptedException e) { 
           e.printStackTrace(); 
          } 

         } 
         try { 
          pointerUp(); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 

        } 

       }; 
       thread.start(); 
       break; 
      default: 
       return false; 

답변

0

잘 모르겠습니다. 그런데 왜 글로벌 부울 플래그를 설정할 수 없습니까? 스레드가 잠든 후 잠시 후 작업이 발생했는지 확인하십시오. 그렇다면 true로 설정하십시오. 그런 다음 플래그의 값에 따라 else를 코딩 할 수 있습니다.