마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이벤트 리스너 호출 타이밍 문제

0 추천

 각각의 이미지에 터치리스너를 달아줬습니다.

한쪽 터치가 동작시에 부울변수를 변경하여

다른쪽 터치리스너가 동작하지못하게 코드를 짯는데

타이밍이 부울변수가 변경이 되기전에 막으려는 쪽의 터치리스너가 먼저 동작을

해버리네요.. 이부분에 대해 어찌할 방법이없을까요?

 

간단하게 소스코드로 상황을 요약해보자면

멤버 부울변수 = false;

이미지1.setOnTouchListener(new OnTouchListener() {

               @Override
                public boolean onTouch(View v, MotionEvent event) {
                case MotionEvent.ACTION_POINTER_DOWN:
                    부울변수 = true처리
                    멀티터치로 인식시 다른쪽 이미지 이벤트리스너의 move를 막기위함이 목적
                }

}

 

이미지2.setOnTouchListener(new OnTouchListener() {

               @Override
                public boolean onTouch(View v, MotionEvent event) {
                if(부울변수가 true라면 처리안함){
                     case MotionEvent.ACTION_MOVE:
                      이부분이 먼저동작하고 부울변수가 true처리되어 타이밍이 안맞음
                   }
                }

}

예림이그코드좀바바 (2,470 포인트) 님이 2015년 8월 25일 질문

2개의 답변

+1 추천
 
채택된 답변
저 이미지1,2 가 이미지뷰라면 이미지뷰 상속받은 커스텀 뷰 만들어서 static한 controll이 필요할 것 같네요
wrestler999 (630 포인트) 님이 2015년 8월 25일 답변
예림이그코드좀바바님이 2015년 8월 25일 채택됨
소중한 답변 감사드립니다.
정확히 말씀드리자면 background속성을 사용한 레이아웃입니다.
각각의 레이아웃이 부모자식 관계라고 한다면..
일단 역시 상속받아아서 커스텀 하시고
getParent().requestDisallowInterceptTouchEvent(boolean);
활용해보세요
레이아웃이 부모자식관계가아닌 독립적관계라서요..
일단 다른 꼼수로 터치를 구분했습니다.
그냥 부울갯수를 늘려서 더 구분했네요..
이제 꼬이는 순간 헬이대는거..ㅠㅠ
일단 모든분들게 추천하나씩드리고
먼저 더 자세히 답변주신 999님게 채택드립니다.
+1 추천
image1 의 touch event 에서 image2 를 setEnabled(false) 를 줘보세요
aucd29 (218,390 포인트) 님이 2015년 8월 25일 답변
소중한 답변 감사드립니다.
아예 죽여버리면 안되고 그쪽 이벤트의 특정부분만 죽이려하는거거든요
(예를들면 move만 죽이고 down은 놔둔다던지.. 그리고 특정상황에서
다시 살리고 죽이고하거든요) 그리고 속성이 적용되기전에
2번쪽의 리스너가 먼저작동해버려서 setEnabled로 해도 한타임이 늦을거같네요.
...