아래와 같이 쓰레드 핸들러를 구현했습니다

버튼 ACTION_DOWN일때 run이 실행되고 ACTION_UP이면 run을 멈춥니다. (runFlgY로 설정)

이상한건...ACTION_UP을 했을때...

InputReader(134): dispatchTouch::touch event's action is 1 이 호출되면서

2~3번 스레드가 더 실행되는 겁니다. ㅠ.ㅠ

아래 LogCat의 경우는 498에서 버튼Up을 했는데... 495까지 실행이 된경우 입니다.

뭐가 문제 인지... 알 수가 없습니다.

여러 고수님들 도와 주세요~! ㅠ.ㅠ

  /**
  * Y축 핸들러
  */
 Handler mHandlerY = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   horizonParam.setMargins(valX, msg.arg1, 0, 0);
   lytMove.setLayoutParams(horizonParam);
  }
 };
 
 /**
  * Y축 스레드
 */
 class BackThreadY extends Thread {
  Handler mHandlerY;
  BackThreadY(Handler handler) {
   mHandlerY = handler;
  }
  @Override
  public void run() {
   while (runFlgY) {
    y--;
    Message msg = Message.obtain(mHandlerY, 0, y, 0);
    Log.i("SCR_Y", 550 + "," + y);
    mHandlerY.sendMessage(msg);
    try {Thread.sleep(mSpeed);} catch (InterruptedException e) {;}
   }
  }
 }
 
  // Y축 터치 리스너
  btnMove.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    mThreadY = new BackThreadY(mHandlerY);
    mThreadY.setDaemon(true);
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
     mThreadY.start();
     break;
    case MotionEvent.ACTION_UP:
     runFlgY = false;
     break;
    }
    return false;
   }
  });
 
LogCat
12-12 09:36:58.787: INFO/SCR_Y(2324): 550,501
12-12 09:36:58.791: INFO/SCR_Y(2324): 550,500
12-12 09:36:58.795: INFO/SCR_Y(2324): 550,499
12-12 09:36:58.795: INFO/SCR_Y(2324): 550,498
12-12 09:36:58.795: INFO/InputReader(134): dispatchTouch::touch event's action is 1
12-12 09:36:58.795: INFO/InputDispatcher(134): Delivering touch to current input target: x: 408.851776, y: 757.947449, action: 1, channel '40a79130 com.ASDF/com.ASDF.main.asdf (server)'
12-12 09:36:58.799: INFO/SCR_Y(2324): 550,497
12-12 09:36:58.803: INFO/SCR_Y(2324): 550,496
12-12 09:36:58.806: INFO/SCR_Y(2324): 550,495