티스토리 뷰
우선 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 차이 (터치 사라지게 하기)
기본적으로 터치이벤트를 받은 후 return false로 되어있다.
터치이벤트를 GestureDetector가 받은 후 return false 를 해주면 그 터치 이벤트를 exoplayer가 받아서 기본 이벤트인 controller를 활성화시키고, 비활성화시키는 동작을한다. 하지만 우리가 원하는 것은 doubletap을 했을 때 컨트롤러가 보였다가 사라지길 원하는 것이 아니므로 return true 로 터치이벤트를 없애준다.
그렇게하면 자신이 원하는 동작을 터치 동작에 따라 만들 수 있다.
'Web&App > 안드로이드' 카테고리의 다른 글
안드로이드 스튜디오에서 핸드폰 해상도 dpi 확인 및 변경 1dp 계산 (0) | 2020.04.28 |
---|---|
안드로이드 Room 사용 코드랩 ( SQLite 를 업그레이드? ) (0) | 2020.04.02 |
onTouchListener , return true 와 false 차이 (터치 사라지게 하기) (0) | 2020.03.25 |
안드로이드 터치 막기 (0) | 2020.03.19 |
안드로이드 배터리 상태 확인하기 broadcastreceiver 사용 BATTERY_LOW (0) | 2020.03.18 |