设置地图的缩放级别
谷歌地图的默认缩放级别是10,通过如下代码可获取
float defaultZoom = aMap.getCameraPosition().zoom;
通过如下代码可设置
aMap.moveCamera(CameraUpdateFactory.zoomTo(14));
设置为14之后,地图的缩放效果如下
设置定位的频率
默认情况下地图的定位频率是,没隔1秒,就请求一次,同时将蓝点移动到当前位置。现在我们希望只定位一次,添加如下代码即可
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;
特别注意:
当你的定位频率设置为1次时,首次进入地图,可能会出现一个bug,就是首次地图展示时,需要一个定位的权限,当你点击允许定位权限后,发现地图并没有进行更新到自己的当前位置。因此为了解决这个问题,我们可以通过如下代码来解决.
//设置地图的定位源监听
aMap.setLocationSource(this);
setLocationSource 的监听器有两个回调activate 和deactivate
activate表示定位已经激活成功,因此在activate添加如下代码
OnLocationChangedListener mListener;
AMapLocationClient mlocationClient;
AMapLocationClientOption mLocationOption;
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
if (mlocationClient == null) {
mlocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
//设置定位监听
mlocationClient.setLocationListener(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (mListener != null && amapLocation != null) {
if (amapLocation != null
&& amapLocation.getErrorCode() == 0) {
mListener.onLocationChanged(amapLocation);
LatLng curLatlng = new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude());
} else {
String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
}
}
}
});
//设置为高精度定位模式
mLocationOption.setOnceLocation(true);
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
mlocationClient.startLocation();
}
}
deactive表示已经停止定位,在该方法中应该释放资源
@Override
public void deactivate() {
mListener = null;
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}
给地图添加一个自己的定位图标
效果如下
首先准备一个定位图标,如下
添加如下代码,即可有上述效果
//当地图加载完成之后,就往上面加一个自己的定位图标
aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
@Override
public void onMapLoaded() {
addMarkerInScreenCenter(null);
}
});
Marker locationMarker;
private void addMarkerInScreenCenter(LatLng locationLatLng) {
LatLng latLng = aMap.getCameraPosition().target;
Point screenPosition = aMap.getProjection().toScreenLocation(latLng);
locationMarker = aMap.addMarker(new MarkerOptions()
.anchor(0.5f,0.5f)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.purple_pin)));
//设置Marker在屏幕上,不跟随地图移动
locationMarker.setPositionByPixels(screenPosition.x,screenPosition.y);
locationMarker.setZIndex(1);
}
测试效果,当你移动地图时,当前的图标始终处于地图的中心点,并不会跟随地图移动