ViewPager와 SwipeRefreshLayout을 같이 사용할 경우, 서로 스크롤이 엉켜 ViewPager의 스크롤이 엉성하게 된다.
이럴 경우 iOS 같이 Horizontal일 경우에 SwipeRefreshLayout을 Disable을 시키고,
Vertical 일 경우 Enable을 시키는 방식을 이용하면 된다.
1. Horizontal 인지 파악하는 Detector를 하나 만들어 둔다.
public static class XScrollDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return Math.abs(distanceX) > Math.abs(distanceY);
}
}
2. 전역 변수를 아래와 같이 설정 한다.
private GestureDetector mGestureDetector;
private boolean isLockOnHorizontialAxis;
3. Detector를 정의 한다.
mGestureDetector = new GestureDetector(getContext(), new LayoutUtils.XScrollDetector());
4. ViewPager에 아래와 같은 TouchListener를 설정 한다.
View.OnTouchListener viewpagerTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (!isLockOnHorizontialAxis)
isLockOnHorizontialAxis = mGestureDetector.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP)
isLockOnHorizontialAxis = false;
if (isLockOnHorizontialAxis) {
mSwipeRefreshLayout.setEnabled(false);
} else if (!isLockOnHorizontialAxis) {
mSwipeRefreshLayout.setEnabled(true);
}
return false;
}
};
그럼 Horizontal 일 경우에는 SwipeRefreshLayout이 Disable이 되므로 동작이 이뤄지지 않는다.
참고 하세요.
참고 소스 : http://vision-apps.blogspot.ro/2013/05/4-directions-swipe-navigation.html
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[Android] can not run program svn (0) | 2015.12.22 |
---|---|
[Android] Viewpager가 갱신이 되 않는 현상. (0) | 2015.12.22 |
[Android] android.content.res.Resources$NotFoundException: String resource ID (0) | 2015.12.18 |
[Andoird] Button 클릭 시, textColor 변경 (0) | 2015.12.17 |
[Android] Recycler View 사이에 divider 크기 조절 (0) | 2015.12.17 |