在Android开发中,如果在ScrollView中嵌入了百度地图,横向拖动时候没有异常,当纵向拖动的时候就会优先拖动ScrollView,而不会触发百度地图。在网上查了很多解决方法,基本都是 修改 mMapView.setOnTouchListener中的onTouch事件,当地图获取到onTouch时ScrollView就不拦截事件,当地图没有获取onTouch时ScrollView就截取onTouch事件并处理,但是想的很美好,现实很残忍,这个方法根本不好用,因为百度地图的mapView根本不会获取到onTouch事件。
解决办法是重写一个ScrollView,判断触摸时是否触摸到地图控件范围内,触摸到了地图范围内,就不拦截事件,否则正常执行拦截。
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class MyScrollView extends ScrollView
{
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
private Boolean mIfOnMap = false;//是否点击到地图了
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
Log.v("test", "onInterceptTouchEvent:"+ev.getAction()+"mIfOnMap:"+mIfOnMap);
int x = (int) ev.getX();
int y = (int) ev.getY();
Rect rect = new Rect();
if (OrderAuthorActivity.mMapView != null) {
Log.v("test", "not null");
OrderAuthorActivity.mMapView.getDrawingRect(rect);
}
mIfOnMap = !rect.contains(x, y);
Log.i("touch map?", mIfOnMap+"" );
if (mIfOnMap) {
return false;
}else {
return super.onInterceptTouchEvent(ev);
}
}
}