上一篇记录了高德地图的简单集成。只是初始化了地图,没有实现任何功能。这篇文章记录下定位功能和添加marker标记。
声明:本篇文章所以代码皆来自官方文档,我只是拼接了下。
效果图
效果图是这样的
定位
下面直接记录定位实现过程
在onCreate里添加下面代码,这里需要实现一个接口。
1
2
3
4
5
6
7
//初始化地图控制器对象
AMap aMap = mMapView.getMap();
// 设置定位监听
aMap.setLocationSource(this);
// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
aMap.setMyLocationEnabled(true);
实现的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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();//启动定位
}
}
public void deactivate() {
mListener = null;
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}
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);
}
}
}
重写生命周期
1 |
|
至此,定位功能已经实现。但是并没有显示定位蓝点,也就是我们常见的那个定位标记。
显示定位蓝点
1 |
|
对定位蓝点进行自定义
你会发现效果图中的精度圈跟默认的不同,就是在这里自定义的。1
2
3
4
5
6
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
示例代码如下:
你可以根据自己的需求进行自行添加,拿到经纬度即可。
1 |
|
设置缩放级别
1 |
|
设置比例尺和定位按钮
1 |
|
个人集成的时候和大家一样,也是一点点扒官网代码来的。这里把这些给贴出来。有需求的可以复制。
比较推荐通过官方文档进行学习,可能有些不清楚的地方需要网上搜索。毕竟有时候真的在官方文档找不到。
这里我偷懒了,都是粘贴一堆代码,还望见谅。重在实现功能吧。^_^
Demo下载
github暂时未传,回头完善了再传