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

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

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

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

if (mapView.getZoomLevel()

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

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

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

你可能感兴趣的:(android)