Android高德地图自定义Mark并实现聚合效果
起因:公司本来项目里面用到了高德地图,然后最近老板看见别人的APP里面有个聚合的这个功能,老板:“这个效果能不能实现,我也要!”没有办法因为以前没有做过高德地图点聚合这个东西,然后只能勉强的答应下来可以,然后就去看了高德开发者平台上面的给我说的点聚合,看完以后(星星你个大星星),能不能写例子,要是像他那个说的那个简单我真的就是谢谢了!没办法只能去下载高德地图提供给我的dome了,然后看了dome以后在dome的基础上面进行改造,然后就出来了。
先看一下效果
然后我们先看下我们下载下来的高德地图的dome 的结构
打红的框子的就是高德dome的东西,然后查看他的dome你会发现主要的类ClusterOverlay这个类。
然后我们来分析一下dome里面需要我们改的东西。然后我会被解释写在里面
先看一看这个类的构造
/*
* amap 地图的对象
* clusterItems 这个就是数据的集合
* clusterSize 聚合范围的大小(指点像素单位距离内的点会聚合到一个点显示)
*/
public ClusterOverlay(AMap amap,
List<ClusterItem> clusterItems,
int clusterSize,
Context context) {
...}
再看下添加点的方法
/**
* 将聚合元素添加至地图上
*/
private void addClusterToMap(List<Cluster> clusters) {
ArrayList<Marker> removeMarkers = new ArrayList<>();
removeMarkers.addAll(mAddMarkers);
//点聚合的动画
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
MyAnimationListener myAnimationListener = new MyAnimationListener(removeMarkers);
for (Marker marker : removeMarkers) {
marker.setAnimation(alphaAnimation);
marker.setAnimationListener(myAnimationListener);
marker.startAnimation();
}
//便利一下数据类然后开始添加我们的点
for (Cluster cluster : clusters) {
addSingleClusterToMap(cluster);
}
}
private void addSingleClusterToMap(Cluster cluster) {
MyLoge.addLoge("addSingleClusterToMap", cluster.getClusterItems().get(cluster.getCluster