티스토리 뷰

 

우선 double tap을 사용하기위해 GestureDetector 를 사용하였다.

 

사용법은

 

1단계 : GestureDetector 클래스를 내부 클래스로 받아온다.

 

나는 아래 코드를 사용하고자 하는 엑티비티 또는 프레그먼트 가장 아래, } 바로 전에 넣어두었다.

 private GestureDetector.SimpleOnGestureListener mOnSimpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() {

                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    Log.d("qqq", "event up: " + e.toString());
                    return true;
                }

                @Override
                public void onShowPress(MotionEvent e) {

                }

                @Override
                public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

                    return false;
                }

                @Override
                public void onLongPress(MotionEvent e) {

                }

                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

                    return false;
                }

//                @Override
//                public boolean onUp(MotionEvent e) {
//                    Log.d("qqq", "event: " + e.toString());
//
//                    return false;
//                }

                @Override
                public boolean onDown(MotionEvent e) {
                    Log.d("qqq", "event: " + e.toString());

                    return true;
                }

                @Override
                public boolean onDoubleTap(MotionEvent e) {
                    Log.d("qqq", "onDoubleTap: " + e.toString());
                    exoPlayerView.hideController();
                    //
//        tested_ok=flase;
                    if(e.getX() < (sWidth / 2 )) {
//            intLeft = true;
//            intRight = false;
//        getActivity().getWindowManager().getDefaultDisplay().getSize(size);
//        sWidth = size.x; sWidth를 통해 화면을 왼쪽 오른쪽으로 구분해준다.

                        fast.setVisibility(View.INVISIBLE);
                        rewind.setVisibility(View.VISIBLE);
                        fast.startAnimation(animinvisible);
                        rewind.startAnimation(animFadeOut);

                        leftgo.performClick();

                        logger.d("left");

                    }
                    else if(e.getX() > (sWidth / 2))
                    {
//            intLeft = false;
//            intRight = true;

                        rewind.setVisibility(View.INVISIBLE);
                        fast.setVisibility(View.VISIBLE);
                        rewind.startAnimation(animinvisible);
                        fast.startAnimation(animFadeOut);

                        rightgo.performClick();

                        logger.d("right");

                    }

                    return true;
                }

                @Override
                public boolean onDoubleTapEvent(MotionEvent e) {

                    return super.onDoubleTapEvent(e);
                }

                @Override
                public boolean onSingleTapConfirmed(MotionEvent e) {
                    Log.d("qqq", "onSingleTapConfirmed: " + e.toString());
                    Log.d("qqq", "showflag: " + showflag);
                    if(showflag) {
                        exoPlayerView.showController();
                    showflag = false;
                    pause_btn.performClick();
                    }
                    else {
                        exoPlayerView.hideController();
                    showflag = true;
                        play_btn.performClick();
                    }
                    return true;
                }

            };

 

 

 

2단계 : private GestureDetector gDetector; 변수를 선언해둔다. ( onCreate 전에 변수생성하는 곳에)

 

 

 

3단계 : gDetector = new GestureDetector(getActivity(),mOnSimpleOnGestureListener); 를 통해 gestureDetector를 불러온다. 나의 경우는 fragment 안에서 사용하기 때문에 getActivity로 하였다. 일반적으로는 activity(자기 엑티비티 이름).this 쓰면 될 듯

 

+ getActivity().getWindowManager().getDefaultDisplay().getSize(size);
sWidth = size.x;

 

왼쪽 오른쪽을 구분하기위해 위 코드를 사용한다. 화면을 x축 사이즈를 받아올 수 있다. 사용은 doubletap 이벤트를 받는  

 

@Override
                public boolean onDoubleTap(MotionEvent e)

 

에서 사용한다.

 

 

 

4단계 : onTouchListener 를 통해 터치 이벤트를 받아서 gestureDetector에 전해준다.

 

 exoPlayerView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
//                exoPlayerView.hideController();
                if(gDetector!=null)return gDetector.onTouchEvent(event);

                return true;
            }


        });

 

나의 경우에는 exoPlayer를 사용했기때문에 PlayerView 에서 제공하는 setOnTouchListener를 사용해주었다.

 

마지막으로 주의할 점은

2020/03/25 - [인턴/안드로이드] - onTouchListener , return true 와 false 차이 (터치 사라지게 하기)

 

onTouchListener , return true 와 false 차이 (터치 사라지게 하기)

return true로 받으면, 받은 터치를 없애겠다는 뜻이다. return false로 받으면, 받은 터치를 다른곳에서도 사용할 수 있게 남겨두겠다는 뜻이다. 나는 이번에 double tap 을 사용하기 위해 GestureDetector 라이..

15051015.tistory.com

기본적으로 터치이벤트를 받은 후 return false로 되어있다.

 

터치이벤트를 GestureDetector가 받은 후 return false 를 해주면 그 터치 이벤트를 exoplayer가 받아서 기본 이벤트인 controller를 활성화시키고, 비활성화시키는 동작을한다. 하지만 우리가 원하는 것은 doubletap을 했을 때 컨트롤러가 보였다가 사라지길 원하는 것이 아니므로 return true 로 터치이벤트를 없애준다.

 

그렇게하면 자신이 원하는 동작을 터치 동작에 따라 만들 수 있다.

 

댓글
최근에 올라온 글
최근에 달린 댓글
250x250