본문 바로가기
Android/Dev

SwipeRefreshLayout 을 사용할 때 가로 스크롤 과 충돌하지 않게하기

by featherwing 2019. 3. 17.
반응형

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);

    }

}
반응형

댓글