有时候需要将MapView放在Scrollview中,但是两者都是滑动的,当滑动MapView的时候有可能会导师Scrollview滑动,导致性能不好。可以地图ontouch事件里,禁用scrollview对touch的截获,但是MapView捕获不到ontouch事件,所以在把在MapView外再嵌套一层view(LinearLayout或者RelativeLayout),在这层Layout中拦截Scrollview的滑动:
public class MapRelativelayout extends RelativeLayout{
private ScrollView scrollView;
public MapRelativelayout(Context context) {
super(context);
}
public MapRelativelayout(Context context, AttributeSet attrs) {
this(context,attrs,0);
}
public MapRelativelayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setScrollView(ScrollView scrollView) {
this.scrollView = scrollView;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (scrollView!=null){
if (ev.getAction() == MotionEvent.ACTION_UP) {
scrollView.requestDisallowInterceptTouchEvent(false);
} else {
scrollView.requestDisallowInterceptTouchEvent(true);
}
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
}