class MyThread extends Thread{
MyThread() {
}
@Override
public void run() {
while(true) {
if ((time+200<System.currentTimeMillis())&&(!stop)){
time=System.currentTimeMillis();
rectLeft+=10;
myview.postInvalidate();
}
}
}
}
사각형이 이동하다가 버튼을 누르고 있는 동안만 멈추는 동작을 구현하기 위해 위와 같은 스레드를 생성했습니다. 실제로 실행을 해보니 버튼을 누르는 동안 사각형이 멈추는 것까지는 제 생각과 같았습니다. 그런데 손을 떼면 멈춘 위치부터 사각형이 다시 이동할 거라는 제 예상과는 달리, 멈춘동안도 rectLeft가 증가라도 한 것 마냥 멈춘 위치보다 더 우측에서 사각형이 이동했습니다. 그리고 버튼을 누른 시간이 길수록 사각형이 멈춘위치에서 벗어난 정도도 컸습니다.
어떠한 이유로 이런 결과가 나오는 지 알려주시면 감사하겠습니다.
myview는 top,bottom은 고정 left,right는 rectLeft, rectLeft+100인 사각형이 그려진 뷰이고,
stop변수는 아래와 같이 버튼을 누르면 true가 되었다가 손을 떼면 false가 되도록 하였습니다.
btn_stop.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
stop= (event.getAction() != MotionEvent.ACTION_UP);
return false;
}
});