본문 바로가기
개발

[코틀린] 뷰페이저2 안에 맵뷰에서 좌우 스와이프가 안먹힐 때 (커스텀 맵뷰)

by kks950115 2024. 3. 14.
728x90

내가 한 결과물은 아니고 다른 팀원과 네이버 맵 api를 쓰는 게 겹쳐서 해결법을 모색하다가 알아낸 방법이다.

뷰페이저는 좌우로 스크롤을 할 수 있는데 뷰페이저 안에 있는 페이지에 맵뷰를 쓸 경우 좌우로 스와이프를 하면 맵뷰가 움직이는 게 아니라 화면이 넘어가버리는 문제가 있었다.

혹여나 같은 문제를 겪는 분에게 참고가 될까해서 공유한다.

영상으로 보면 이해가 빠를 것이다.

 

 

 

 

커스텀 맵뷰를 사용하는 방법이다.

class ScrollAwareMapView : MapView {
    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    )

    override fun dispatchTouchEvent(event: MotionEvent?): Boolean {
        parent.requestDisallowInterceptTouchEvent(true)
        return super.dispatchTouchEvent(event)
    }
}

 

xml 파일에다가 커스텀한 맵뷰를 써준다.

<com.package.view.widget.ScrollAwareMapView
                android:id="@+id/map"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

 

mapview 초기화 방법

 private val mapView : MapView by lazy{
        requireViewDataBinding().map
 }

 

그외에는 생명주기를 맞춰주고 써주면 된다. 이건 공식문서에 써있으니 참고하면 된다.

 

 

 

참고 : https://yuar.tistory.com/entry/NaverMap-API-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

728x90
반응형

댓글