본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] scrollview 안에 mapview 가 있을 때 문제점 & 해결방법

by 돼지왕 왕돼지 2012. 10. 18.
반응형





ScrollView 안에 MapView 가 있을 때 생기는 문제점 & 해결 방법

문제점

- 비단 ScrollView 뿐만 아니라 scroll 가능한 component 안에 scroll 가능한 component 를 넣게 되면, 문제가 발생하기 쉽습니다. 무슨 문제냐? 어떤 녀석이 MotionEvent 를 지속적으로 가져가느냐에 대한 문제가 생깁니다.

- MapView 도 scroll 이라고 말하기에는 조금 어색하지만 손으로 잡고 위치를 이동할 수 있으니 scroll 과 거의 같은 개념이라고 볼 수 있습니다.

- ScrollView 와 같이 지속적으로 MotionEvent 를 처리해야 하는 녀석들이 중첩되면 누가 event 를 처리할 것인지에 대해 conflict 가 발생하기 마련입니다.


- 제가 접한 문제는, ScrollView 안에 MapView 를 사용했을 때 발생한 문제이며, MapView 를 손으로 잡고 drag 를 해도 처음에만 깔짝 움직이고, 바로 scroll view 가 motion event 를 먹어서 보통 MapView 에 대한 터치 이벤트가 제대로 작동하지 않았습니다.




해결법

- 원인을 알았으니, 해결은 쉽습니다. MapView 가 MotionEvent 를 처리할 때에는 parent 가 해당 motion event 를 intercept 하지 못하도록 하는 것입니다.

- ViewGroup 과 ViewParent 에는 requestDisallowInterceptTouchEvent( boolean ) 이라는 기묘한 함수가 있습니다. 말 그대로 touch event 를 intercept 하지 못하도록 하는 것이죠.


- 아래와 같은 코드로 문제 없이 해결 할 수 있습니다.

@Override

public boolean onTouchEvent(MotionEvent ev) {

     int action = ev.getAction();

     switch (action) {

     case MotionEvent.ACTION_DOWN:

        this.getParent().requestDisallowInterceptTouchEvent(true);

        break;

    case MotionEvent.ACTION_UP:

        this.getParent().requestDisallowInterceptTouchEvent(false);

        break;

    }

    super.onTouchEvent(ev);

    return true;

}






도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )



반응형

댓글