当前位置: 代码迷 >> Android >> Android 为百度map缩放设置自定义的缩放范围ZoomLevel(个人)
  详细解决方案

Android 为百度map缩放设置自定义的缩放范围ZoomLevel(个人)

热度:36   发布时间:2016-04-28 06:05:27.0
Android 为百度地图缩放设置自定义的缩放范围ZoomLevel(个人)

目前百度地图的缩放级别为(3-18),有时候我们不需要这样的范围,可能是 (5-14),约束用户查看地图级别

目前网上我没找到其他实现方法,然后自己研究了一下,把地图原有的缩放按钮去掉的话,有三种情况会产生缩放行为的,

1、自定义的缩放按钮,可以在该缩放事件里面判断

if (mapView.getZoomLevel()<zoomlevel) {				mapController.zoomIn();			}

在预定范围能才执行地图缩放方法

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);	}

代码为局部代码,思路看文字琢磨

  相关解决方案