안드로이드 개발 질문/답변
(글 수 45,052)
드래그하는 간단한 프로그램을 작성하고 있습니다.
MotionEvent.ACTION_MOVE 이벤트 시 선택된 marble이 드래그 되는데
부드럽게 이어져서 드래그 되는게 아니라 끊기고 실제 커서에 비해 많이 못 따라옵니다.
좀더 부드럽게 드래그될 수 있는 방법이 없을까요?
onTouchEvent가 실제 터치의 MOVE 이벤트를 못 따라가는 것은 아닌지 궁금합니다.
public boolean onTouchEvent(MotionEvent event)
{
touchX = (int) event.getX();
touchY = (int) event.getY();
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
for(int i = 9; i >= 0; i--) {
if(marble[i].isSelected(touchX, touchY))
break;
}
break;
case MotionEvent.ACTION_MOVE:
for(int i = 9; i >= 0; i--) {
if(marble[i].isActivity())
marble[i].changePosition(touchX, touchY);
}
break;
case MotionEvent.ACTION_UP:
for(int i = 9; i >= 0; i--) {
marble[i].turnOffActivity();
}
break;
}
invalidate();
return true;
}
2011.09.29 12:20:49
제가 생각하는 구조로는 down에서 객체를 클릭했냐 체크 -> move에서 객체 클릭이면 포지션이동 (이동하면서 계속 새로그림)
-> up 한경우 객체클릭 해제... 이렇게하면 될거같은데요.. invalidate();가 move쪽에만 있어도 될거 같습니다...
그리고 저는 주로 Canvas 써서 onDraw를 많이 애용해주는 편입니다
2011.09.29 13:56:48
SurfaceView 를 쓰시면 마블 한개 정도는 문제될게 없는데
주의)에뮬레이터 이시면 원래 엄청 느린거에요^^
터치 MOVE 좌표간 반응 간격을 줄이실려면
지금 실행하는 앱의 Thread Priority를 강제로 다운하시면
상대적으로 터치 입력의 텀이 짧아져요




이 소스만 보았을 때는 marble라는게 뷰인가보죠? 상당히 리소스 잡아먹을 듯한 소스네요.... 안드로이드는 데스크탑보다 리소스가 좋지 않은 걸 생각했을 때 구조를 바꾸시는 게 좋을 듯 생각이 듭니다.