반응형
WebView와 같은 객체를 사용할때 주로 같이 사용하는 레이아웃이 SwipeRefreshLayout입니다.
모바일 크롬처럼 화면을 아래로 내리면 웹뷰가 새로 로딩되게 해주는 레이아웃 입니다.
이때 문제가 되는 것이, 웹뷰에 로딩중인 사이트에서 가로스크롤이 가능한 요소가 있을 경우에는
해당 요소를 가로 스크롤 할 때 SwipeRefreshLayout이 오작동 하거나
가로 스크롤 요소의 가로 스크롤이 불가능한 경우가 발생합니다.
아래와 같은 CustomSwipeRefreshLayout 을 사용해 주어야 오작동을 방지하고 가로 스크롤 요소와
SwipeRefreshLayout의 기능을 충돌하지 않게 사용할 수 있습니다.
아래와 같은 클래스를 만들어 주고, xml 레이아웃에서 정의 해주면 사용할 수 있습니다.
public class CustomSwipeRefreshLayout extends SwipeRefreshLayout {
private int mTouchSlop;
private float mPrevX;
public CustomSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPrevX = MotionEvent.obtain(event).getX();
break;
case MotionEvent.ACTION_MOVE:
final float eventX = event.getX();
float xDiff = Math.abs(eventX - mPrevX);
if (xDiff > mTouchSlop) {
return false;
}
}
return super.onInterceptTouchEvent(event);
}
}
반응형
'Android > Dev' 카테고리의 다른 글
화면크기에 따라 일정한 비율로 크기가 자동조절되는 TextView (3) | 2019.07.13 |
---|---|
Uri 로부터 파일의 실제경로 구하기/외장SD카드의 경로 얻기 (7) | 2019.04.03 |
오늘이 양력/음력 공휴일인지 확인하는 코드 (0) | 2019.03.17 |
ScrollView 사용시 스크롤 중인지 판단하여 작업 제한하기 (0) | 2019.03.17 |
soundpool 사용 시 매너모드/무음모드 연동 (0) | 2018.05.05 |
댓글