版权声明:欢迎大家关注我的博客,更多文章请移步新的地址:http://student9128.top https://blog.csdn.net/student9128/article/details/78758574
上一篇记录了高德地图的简单集成。只是初始化了地图,没有实现任何功能。这篇文章记录下定位功能和添加marker标记。
声明:本篇文章所以代码皆来自官方文档,我只是拼接了下。
效果图
效果图是这样的
定位
下面直接记录定位实现过程
在onCreate里添加下面代码,这里需要实现一个接口。
//初始化地图控制器对象
AMap aMap = mMapView.getMap();
// 设置定位监听
aMap.setLocationSource(this);
// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
aMap.setMyLocationEnabled(true);
实现的方法:
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
if (mlocationClient == null) {
//初始化定位
mlocationClient = new AMapLocationClient(this);
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位回调监听
mlocationClient.setLocationListener(this);
//设置为高精度定位模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
mlocationClient.startLocation();//启动定位
}
}
@Override
public void deactivate() {
mListener = null;
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (mListener != null&&aMapLocation != null) {
if (aMapLocation != null
&&aMapLocation.getErrorCode() == 0) {
mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点
} else {
String errText = "定位失败," + aMapLocation.getErrorCode()+ ": " + aMapLocation.getErrorInfo();
Log.e("AmapErr",errText);
}
}
}
重写声明周期
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
if(null != mlocationClient){
mlocationClient.onDestroy();
}
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
至此,定位功能已经实现。但是并没有显示定位蓝点,也就是我们常见的那个定位标记。
显示定位蓝点
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
对定位蓝点进行自定义
你会发现效果图中的精度圈跟默认的不同,就是在这里自定义的。
MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类
// myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 //myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_map_location));//定位自定义图标
myLocationStyle.strokeColor(Color.CYAN); //精度圈自定义 myLocationStyle.radiusFillColor(Color.argb(50,38,165,153)) ;//精度圈自定义 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//只定位一次。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
添加Marker
地图上往往有一些标记成为marker.
现在很多app地图里都有好多marker,最具代表性的就是共享单车app
示例代码如下:
你可以根据自己的需求进行自行添加,拿到经纬度即可。
aMap.addMarker(new MarkerOptions().position(new LatLng(31.238075,121.662691)).title("上海"));
aMap.addMarker(new MarkerOptions().position(new LatLng(31.238403,121.661902)).title("上海"));
设置缩放级别
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
设置比例尺和定位按钮
uiSettings = aMap.getUiSettings();
uiSettings.setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
uiSettings.setScaleControlsEnabled(true);//控制比例尺控件是否显示
个人集成的时候和大家一样,也是一点点扒官网代码来的。这里把这些给贴出来。有需求的可以复制。
比较推荐通过官方文档进行学习,可能有些不清楚的地方需要网上搜索。毕竟有时候真的在官方文档找不到。
这里我偷懒了,都是粘贴一堆代码,还望见谅。重在实现功能吧。^_^
Demo下载
github暂时未传,回头完善了再传