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

온터치 리스너에서 탭을 뗄때의 이벤트가 리스너에 아예 안들어옵니다.

0 추천
 
        _btn1 = (ImageView)activity.findViewById(R.id.app_video_ffw);
        _btn1.setOnTouchListener(new View.OnTouchListener()
        {

            public boolean onTouch(View v, MotionEvent $e)
            {

                int code = $e.getAction() & MotionEvent.ACTION_MASK;
                Log.w("테스트","code->"+code+"//    getAction()->"+$e.getAction());

                switch ($e.getAction())
                {
                    case MotionEvent.ACTION_DOWN:
                        _isBtnDown = true;

                        Log.w("누름","누름");
                        onBtnDown();
                        break;

                    case MotionEvent.ACTION_UP:
                        _isBtnDown = false;
                        Log.w("뗌","뗌");
                        break;

                    default:
                        break;
                }
                return false;
            }
        });

03-03 10:03:22.137 2481-2774/? I/InputDispatcher: Delivering touch to: action: 0x0, toolType: 1
03-03 10:03:22.137 7359-7359/tcking.github.com.giraffeplayer W/테스트: code->0//    getAction()->0
03-03 10:03:22.137 7359-7359/tcking.github.com.giraffeplayer W/누름: 누름
03-03 10:03:22.147 3036-3759/? D/dalvikvm: GC_FOR_ALLOC freed 1303K, 15% free 11866K/13960K, paused 42ms, total 43ms
03-03 10:03:22.197 2481-2775/? I/InputReader: Touch event's action is 0x1 (deviceType=0) [pCnt=1, s=] when=90854057052000

 

-------------------- 로그는 터치했다가 땠을때 .. 뗄때 로그 "테스트"  가 아예 안나옵니다.

 

 

액티비티가 아닌 일반클래스의 생성자에서 선언하였습니다.

안되서 테스트로 액티비티를 따로 구현해봤는데 거기서는 또 되더군요 ..

혹시 이 문제에 대해서 아시거나 짐작이 가는부분이 있는분은 답변해주시면 감사하겠습니다..

문제는 일반클래스에서 선언한 온터치리스너가 액션다운할때만 들어가고 뗄때는 아예 리스너로 들어가질 않습니다. 리스너 안에서 분기가 잘못된게 아닙니다..

 

 

가봉 (220 포인트) 님이 2016년 3월 3일 질문
가봉님이 2016년 3월 3일 수정
_isBtnDonw 불린값은 onBtnDown() 함수에서 스레드를 시작하고 정지하게끔 하는 변수입니다.

1개의 답변

+1 추천
 
채택된 답변
음... 딱히 안될 이유가 없는것 같은데

return false 하지 말고

return true 해보시기 바랍니다..

false를 리턴하면 이벤트 리스너가 다음 리스너로 넘어가버리기 떄문에

터치가 더이상 안먹을수도 있어요.
모나미153 (17,540 포인트) 님이 2016년 3월 3일 답변
가봉님이 2016년 3월 3일 채택됨
와 감사합니다. 해결했습니다..
온터치리스너는 프로젝트에 하나인데 다음리스너로 넘어가 버린다는 말씀은 무슨 말씀인지 이해가 잘 안갑니다 ..
혹시 설명해주실수있나요
사용자가 터치를 하면..
onTouch -> onClick -> onLongClick순으로 이벤트가 발생하는데
retrurn false를 하면 처음 onTouch에서 ACTION_DOWN이 잡힌 후 다음 이벤트는 onClick에서 잡힌다는 뜻입니당..
답변 감사합니다 덕분에 속시원히 해결됐습니다.
...