안드로이드/Android View

[Android] 뷰페이저안에 웹뷰안에 뷰페이저

코딩하는후운 2022. 12. 14. 09:32
반응형

ViewPager안에 WebView안에 ViewPager

 

뷰페이저 안에 웹뷰 터치 중복

[액티비티 뷰페이저] 안에 [프래그먼트]들 안에 [웹뷰]안에 [배너 페이저]가 있는데 

[액티비티 뷰페이저]와 [웹뷰 뷰페이저]가 터치가 중복되는 문제가 생김.

 

ViewPager 내부, webView 가 있는 경우, inApp 에 swipe 아이템 이 있는 경우의 이벤트 처리
- onTouchEvent(ACTION_DOWN) 에서 viewPager 의 paging 을 비활성화 처리
- onOverScrolled (inApp에서 swipe 처리 하지 않는 경우 호출됨) 에서 paging 을 다시 활성화 처리
 
뷰페이저 컨트롤러 클래스 생성
public interface ViewPagerController {
    void setPagingEnabled(boolean isEnable);
}

 

액티비티

@Override
public void setPagingEnabled(boolean isEnable) {
    if (viewPager != null) {
        viewPager.setPagingEnabled(isEnable);
    }
}


//프래그먼트 생성하는곳
if (fragment != null) {
    fragment.setViewPagerController(this);
}

 

웹뷰

private ViewPagerController viewPagerController;



//onTouchListener
case MotionEvent.ACTION_DOWN:
    returnValue = super.onTouchEvent(event);
    mLastY = eventY;
    // start NestedScroll
    startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);

    if (viewPagerController != null) {
        viewPagerController.setPagingEnabled(false);
    }

    break;
    
    
    
    
 

@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
    ExLog.v(TAG, "onOverScrolled");
    if (viewPagerController != null) {
        // ViewPager 내부, webView 가 있는 경우, inApp 에 swipe 아이템 이 있는 경우의 이벤트 처리
        // onTouchEvent(ACTION_DOWN) 에서 viewPager 의 paging 을 비활성화 하고
        // onOverScrolled (inApp에서 swipe 처리 하지 않는 경우 호출됨) 에서 paging 을 다시 활성화
        viewPagerController.setPagingEnabled(true);
    }
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}

public void setViewPagerController(ViewPagerController viewPagerController) {
    this.viewPagerController = viewPagerController;
}

 

BaseFragment

protected ViewPagerController viewPagerController;

public final void setViewPagerController(@Nullable ViewPagerController viewPagerController) {
    this.viewPagerController = viewPagerController;
}

중복되던 프래그먼트

binding.webView.setViewPagerController(viewPagerController);

 

참조 :
팀장 제이씨의 PR에서 보고 나중에 나도 겪을수 있을 것 같아서 남겨두었습니다.

반응형