前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置。地图的触摸事件很丰富,有单击、双击、单指拖拽、双指拖拽、双指旋转、双指缩放等,高德提供了api来设置这些用户交互,还包含地图截图,这也算是用户交互。好了,废话不多说,开始今天的Android高德之旅。
先来看一张图,这是默认的样子
mUiSettings = aMap.getUiSettings(); mUiSettings.setCompassEnabled(true);
mUiSettings = aMap.getUiSettings(); mUiSettings.setScaleControlsEnabled(true);
mUiSettings = aMap.getUiSettings(); mUiSettings.setZoomControlsEnabled(true);
这个位置不是固定的,可以设置
mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM) //左下角 mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER) //左中间
mUiSettings = aMap.getUiSettings(); mUiSetting.setLogoPosition(int);
这里写图片描述
这个logo是不可以去掉的,必须显示,因为毕竟你用别人的SDK,总得把别人体现出来。 系统提供了6种logo的位置:
mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_LEFT); mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_BOTTOM); mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_RIGHT); mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT); mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_RIGHT); mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_CENTER);
但是实际运行后发现,6个值只有三个位置。 LOGO_MARGIN_LEFT 和 LOGO_POSITION_BOTTOM_LEFT是一样的 LOGO_MARGIN_RIGHT 和 LOGO_POSITION_BOTTOM_RIGHT是一样的 LOGO_MARGIN_BOTTOM 和 LOGO_POSITION_BOTTOM_CENTER是一样的
这就尴尬了~难道是我打开的方式不对嘛,知道的可以跟我说一下。
float scale = aMap.getScalePerPixel();
获取出来的这个scale单位是米/像素,也就是屏幕上一像素等于实际多少米
mUiSettings.setScrollGesturesEnabled(false);
mUiSettings.setZoomGesturesEnabled(false);
mUiSettings.setTiltGesturesEnabled(false);
mUiSettings.setRotateGesturesEnabled(false);
mUiSettings.setAllGesturesEnabled (false);
UiSettings.isRotateGesturesEnabled() UiSettings.isZoomGesturesEnabled() UiSettings.isScrollGesturesEnabled() UiSettings.isTiltGesturesEnabled()
大家还记得吗,第一篇最后,我们做了一个小效果,单击地图,地图定位到某个地方,然后视角倾斜60度,并且地图旋转90度。
aMap.animateCamera( CameraUpdateFactory.newCameraPosition(new CameraPosition( new LatLng(39.92463, 116.389139), //经纬度 16, //缩放级别 3 -19 3:最大视角,看到全中国,19:最小级别,看到细节 60, //视角从垂直于地面,向下倾斜60度,此时与地面夹角是30度 90) //地图顺时针旋转90度 ), 1500, new AMap.CancelableCallback() { @Override public void onFinish() { } @Override public void onCancel() { } } );
调用aMap.animateCamera,这个过程就是动画形式的,还有另外一个没有动画的api
aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition( new LatLng(39.92463, 116.389139), //经纬度 16, //缩放级别 3 -19 3:最大视角,看到全中国,19:最小级别,看到细节 60, //视角从垂直于地面,向下倾斜60度,此时与地面夹角是30度 90) //地图顺时针旋转90度 ));
结果和上面一样,只是这个api不会有动画,从方法名就能看出来。
两个api传入的参数都是CameraUpdate对象,表示更新相机位置(即视角位置) CameraUpdateFactory.newCameraPosition()方法就是返回一个CameraUpdate子类对象
参数分别表示:新的经纬度、缩放级别、视角倾斜角度、地图旋转角度
我们再来看下效果:
newCameraPosition()方法可以一次性设置多个属性,如果我只要缩放一下,就没必要用这个方法
这个方法就可以简单的实现缩放
aMap.animateCamera(CameraUpdateFactory.zoomTo(16));
这个api是一个比较新的api,你先定义好东北、西南两个点的坐标,然后地图根据这两个点限制的范围,自动显示地图。
LatLng northeastLatLng = new LatLng(40.159453, 116.767834); LatLng southwestLatLng = new LatLng(39.674949, 115.932873); LatLngBounds latLngBounds = new LatLngBounds(southwestLatLng, northeastLatLng); aMap.setMapStatusLimits(latLngBounds);
这个就简单了,就是一个api,调用一下。
aMap.getMapScreenShot(new AMap.OnMapScreenShotListener() { @Override public void onMapScreenShot(Bitmap bitmap) { Log.e("TAG", "回调1"); } @Override public void onMapScreenShot(Bitmap bitmap, int i) { Log.e("TAG", "回调2"); ivResult.setImageBitmap(bitmap); if(i == 0) { Log.e("TAG", "地图渲染未完成,截屏有网格"); } else { Log.e("TAG", "地图渲染完成,截屏无网格"); } } });
它有两个回调,第二个回调多一个参数,两个会调都是会走的,但是第二个回调多了一个状态参数。 0 表示截图那一刻,地图还没渲染好 非0 表示截图那一刻地图已经渲染好了
好了,今天要记录的就是这些,下篇博客会讲到我的位置:蓝点定位。
本期节目就到这里,感谢大家的收看,我们下期再见~
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句