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;
}
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] signkey 생성방법 (0) | 2012.10.18 |
---|---|
[android] java.lang.ClassNotFoundException: com.google.android.maps.MapView 해결방법 (0) | 2012.10.18 |
[android] List 류 parcelable 만드는 방법. (3) | 2012.10.18 |
[android] parcelable 에 parcelable 쓰는 방법. ( custom object ) (0) | 2012.10.17 |
[android] activity transition animation 설정하는 방법. (0) | 2012.10.17 |
댓글