Android 为百度地图缩放设置自定义的缩放范围ZoomLevel(个人)
在预定范围能才执行地图缩放方法
目前百度地图的缩放级别为(3-18),有时候我们不需要这样的范围,可能是 (5-14),约束用户查看地图级别
目前网上我没找到其他实现方法,然后自己研究了一下,把地图原有的缩放按钮去掉的话,有三种情况会产生缩放行为的,
1、自定义的缩放按钮,可以在该缩放事件里面判断
if (mapView.getZoomLevel()<zoomlevel) {
mapController.zoomIn();
<pre code_snippet_id="297640" snippet_file_name="blog_20140417_1_6640432" name="code" class="java" style="margin-top: 0px; margin-bottom: 0px; padding: 0px; font-size: 14px; line-height: 24px;">}
在预定范围能才执行地图缩放方法
2、双击地图产生缩放行为:在地图状态监听内,根据获取到的缩放级别,触发状态事件,根据范围来判断然后给双击事件设置开关
mapView.regMapStatusChangeListener(new MKMapStatusChangeListener() {
@Override
public void onMapStatusChange(MKMapStatus status) {
// TODO Auto-generated method stub
if (status.zoom>=zoomlevel) {
if (mapView.isDoubleClickZooming()) {
mapView.setDoubleClickZooming(false);
}
}else {
if (!mapView.isDoubleClickZooming()) {
mapView.setDoubleClickZooming(true);
}
}
}
});
3、地图两点手指缩放:为百度地图添加 触摸事件,在给予多点触摸判断,再计算两点距离变化值,就可以控制缩放级别了,返回true 就是不传递事件下去,禁止了百度地图放大,
mapView.setOnTouchListener(this);
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_POINTER_DOWN:
isTouch = true;
distance = 0;
break;
case MotionEvent.ACTION_POINTER_UP:
isTouch = false;
break;
case MotionEvent.ACTION_UP:
isTouch = false;
break;
case MotionEvent.ACTION_MOVE:
if (isTouch) { //判断多点移动
float mill = spacing(event); //两点距离
if (mill>distance) {
if (mapView.getZoomLevel()>=zoomlevel) { //超出范围
distance = mill;
return true;
}
}
distance = mill;
}
break;
default:
break;
}
return false;
}
/**
* 计算两点距离
*
* @param event
* @return
*/
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}