티스토리 뷰

안드로이드에서 ViewPager는 흔히 쓰는 뷰 컴포넌트이다.


보통 페이저 내부에는 플레이그먼트나 리스트뷰 혹은 리사이클러뷰가 들어가기 때문에,

잘 몰랐던 증상이 발생했다.


내부 아이템 뷰에 클릭 리스너를 등록하면, 해당 뷰 플링 동작이 불가능하다 OTL....

안드로이드 터치 이벤트는 리턴에 따라 부모 -> 자식 혹은 자식 -> 부모로 이벤트가 넘어가지 않도록 할 수 있는데,

이게 굉장히 헷갈려서 삽질을 했다.

다음에도 같은 삽질을 하지 않기 위해 미리 남겨 놓자!


private GestureDetector gestureDetector = null;
gestureDetector = new GestureDetector( mContext, new SingleTapGestureListener() );

요렇게 선언되어 있는 변수를

해당 뷰의 터치 이벤트 리스너에 적용해준다.

clickEventView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);
return true;
}
});

SigleTapGestureListener 클래스는 아래와 같다.


private final class SingleTapGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if( velocityX < 0 ) {
// 뷰페이저 오른쪽으로 이동

}else {

// 뷰페이저 왼쪽으로 이동

}
}
catch ( Exception e ) {}
return true;
}

@Override
public boolean onSingleTapUp(MotionEvent event) {
try {
// 클릭 리스너 동작

}
catch ( Exception e ) {}
return true;
}
}

이 외의 터치 이벤트로 SimpleOnGestureListener 안에 함수를 참고해서 Override 해서 쓰면 된당! ^^

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함