안드로이드 개발 정보
(글 수 568)
제목이 맞는 건지 모르겠습니다.
만약 WebView에서 터치이벤트가 발생했을때
그냥 터치를 했는지 아니면 스크롤을 했는지를 캐치해야 합니다.
머리를 아무리 굴려도 아래와 같은 방법밖에는 떠오르지 않더군요.
더 좋은 방법이 있으면 의견 부탁드립니다.
만약 WebView에서 터치이벤트가 발생했을때
그냥 터치를 했는지 아니면 스크롤을 했는지를 캐치해야 합니다.
머리를 아무리 굴려도 아래와 같은 방법밖에는 떠오르지 않더군요.
더 좋은 방법이 있으면 의견 부탁드립니다.
private int toutchX = 0; private int toutchY = 0; @Override public boolean onTouch(View v, MotionEvent event) { if(this.toutchX == 0 && this.toutchY == 0) { this.toutchX = (int)event.getX(); this.toutchY = (int)event.getY(); } if(event.getAction() == MotionEvent.ACTION_UP) { int nowToutchX = (int)event.getX(); int nowToutchY = (int)event.getY(); if(Math.abs(this.toutchX - nowToutchX) <= 20 && Math.abs(this.toutchY - nowToutchY) <= 20) { // 터치 이벤트가 발생했습니다. } this.toutchX = 0; this.toutchY = 0; } return false; }
2010.02.11 16:44:05
코드는 비슷하게 잘 만드셨네요.
위에 분에 말씀 처럼...DOWN시점에 위치를 기억하고 그 점을 기준점으로 잡은 다음에 이동 거리를 모니터링하면서
판단하시면 될꺼 같습니다. ^^ 실제 저는 그렇게 구현 했구요..
2010.02.11 16:51:53
예전에 풀터치폰 작업할때도 위와 같이 처리했었습니다.
abs 의 미묘한 차이로 폰의 플리킹이 무겁다/빠르다가 결정되기에
최종 하드웨어 조율이 끝날때까지 고민하던 부분이죠.
플리킹이 아이폰 이상으로 반응이 좋게 하려고 한다면.
정확한 터치가 필요하더군요.
저런것은 하드웨어에 맞춰서 고정되게 조율하는 것이 좋겠는데...안드로이드는 하드웨어의 다양함 때문에
상대적인 불이익이 있을것 같네요^^;;
플리킹/무빙을 먼저 반응이 우선인지 터치가 우선인지에 따라서도 다를것 같고
또는 위 판단을 단계별로 나눠서 플리킹 가속도도 다르게 했었던 것 같습니다..
abs 가 10 일때, 20일때....플리킹 속도가 다르게 말이죠^^
하드웨어에 맞게 최적화 시키는게 정말 힘들더군요..
스크롤링에 실제로 반응은 하되, 가속도나 이동거리가 일정 수치 이상 되지 않으면
결과적으로 클릭(터치)한 것으로..
ps. 피쳐폰이라서 그렇긴 하지만 매번 구현 방법이 달랐습니다.ㅎㅎ 하드웨어 최적화...그것이 문제.ㅠㅠ
2010.02.11 17:51:03
그리고 코드만 봤을 때 생각되는 문제점은 이리저리 스크롤하다가 맨 처음 터치한 곳에서 손을 땠을 때를
어떻게 처리하느냐 입니다.
예전에 단순 터치 좌표를 이용해서 만들어봤을 때 문제점이
가만히 눌렀다가 떼는 경우에도 생각보다 좌표값이 많이 바꼈었습니다.
2010.02.19 17:14:46
GestureDetector.SimpleOnGestureListener를 사용 해보시면 어떨까요?
onDoubleTap 이용하면 더블 클릭 구분 가능하구요
onScroll 를 이용하면 드래그 구반 가능하구요
onSingleTap도 있는데 이건 더블 클릭시에도 발생하기에
onSingleTapConfirmed 더블클릭이 아닌 싱글 클릭 구분이 됩니다.
제가 이미지 뷰어를 만드는 중인데 제스쳐 이용해서 그냥 터치/드래그/더블 클릭 구분해서 기능을 줬는데 이상 없이 돌아가고 있네요
onScroll 끝나고 구분이 안되는 문제는 onTouch 에서 UP 잘 구분에서 잡아주면 되구요.
http://blog.vizpei.kr/94697746 <=== 이분 블로그 보고 했는데 괜찮았습니다.
onDoubleTap 이용하면 더블 클릭 구분 가능하구요
onScroll 를 이용하면 드래그 구반 가능하구요
onSingleTap도 있는데 이건 더블 클릭시에도 발생하기에
onSingleTapConfirmed 더블클릭이 아닌 싱글 클릭 구분이 됩니다.
제가 이미지 뷰어를 만드는 중인데 제스쳐 이용해서 그냥 터치/드래그/더블 클릭 구분해서 기능을 줬는데 이상 없이 돌아가고 있네요
onScroll 끝나고 구분이 안되는 문제는 onTouch 에서 UP 잘 구분에서 잡아주면 되구요.
http://blog.vizpei.kr/94697746 <=== 이분 블로그 보고 했는데 괜찮았습니다.
흠...ACTION_DOWN 과 ACTION_MOVE 를 이용해서 구별하는 방법은 없을까요?