android开发中高德地图点聚合自定义聚合点的样式

其实说自定义呢也只是稍微修改了一点官方提供的代码

好吧,说重点:
1.下载官方的点聚合源码,地址为:https://github.com/amap-demo/android-cluster-marker

2.将里面主要的几个文件复制到项目中。还有demo中的那个RegionItem也要一起。

这里写图片描述

3.其实这样可以简单的实现点聚合了,不过是官方默认的实现的方法:

List list = new ArrayList();
for (int i = 0; i < 10000; i++) {
          LatLng latLng = new LatLng(x, y, false);
          RegionItem regionItem = new RegionItem(latLng, title);
          list.add(regionItem);
    }
mClusterOverlay=newClusterOverlay(map,list,dp2px(50,getActivity()),getActivity());

4.以下就是自己的改动了,在 RegionItem里面加一个属性为icon;再在接口ClusterItem里面添加一个方法来获取这个icon,对应的在RegionItem里面实现这个方法回图片。

这里写图片描述

5.接下来就是重要的一步了,在ClusterOverlay中找到addSingleClusterToMap()方法,这个方法就是加载marker的,将其参数添加一个bitmap。然后将传进来的这个bitmap转换为BitmapDescriptor设置到markerOptions的icon里面。

private void addSingleClusterToMap(Cluster cluster, Bitmap bitmap) {
        BitmapDescriptor bitmap1 = BitmapDescriptorFactory.fromBitmap(bitmap);
        LatLng latlng = cluster.getCenterLatLng();
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.anchor(0.5f, 0.5f)
                .icon(bitmap1).position(latlng);
        Marker marker = mAMap.addMarker(markerOptions);
        marker.setAnimation(mADDAnimation);
        marker.setObject(cluster);

        marker.startAnimation();
        cluster.setMarker(marker);
        mAddMarkers.add(marker);
    }

6.这个时候整个类会出现两个地方报错,一个在上面,一个在下面,先说上面这个。报错的方法为addClusterToMap(),他调用了addSingleClusterToMap()方法,需要多传一个bitmap。这时候最开始传进RegionItem里面的那个icon就有用了,这个icon可以是网络图片,也可以是本地图片,反正自己看着办。
通过方法传进来的list集合clusters,可以拿到集合点所有的RegionItem,在通过RegionItem拿出穿进去的图片,或下载,或读取。然后设置进addSingleClusterToMap()方法。

提示:如果是通过网络下载的图片,最好统一下载好,存在某个集合中,最后在提取,不然当图标刷新时会一直闪。最好再写一个三级缓存,免得每次刷新都需要下载图片。而且下载没必要开线程或者异步,因为本来就在子线程中。

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();
        }
        Map map = new HashMap();
        //List<Bitmap> list = new ArrayList<>();
        for (int i = 0; i < clusters.size(); i++) {
            Cluster cluster = clusters.get(i);
            // 将InputStream转换成Bitmap
            CacheUtils utils = new CacheUtils();
            Bitmap bitmap = null;
            bitmap = utils.getImageFromCache(cluster.getClusterItems().get(0).getIcon());//三级缓存的工具类来获取图片。
            map.put(i, bitmap);//存map集合是因为有时候下载失败,bitmap会为null,设置进地图后会显示默认图标,特别丑,所以存个map,只把有值的存进去,而且是一一对应。
            //list.add(bitmap);
        }
        for (Object i : map.keySet()) {
            if (map.get(i) != null) {
                addSingleClusterToMap(clusters.get((Integer) i), (Bitmap) map.get(i));
            }
        }
    }

7.下面那个报错也是同理,虽然不知道有什么用,先改了再说。

Cluster cluster = (Cluster) message.obj;
CacheUtils utils = new CacheUtils();
Bitmap bitmap = null;
bitmap = utils.getImageFromCache(cluster.getClusterItems().get(0).getIcon());
addSingleClusterToMap(cluster, bitmap);

8.最后在需要的地方按最开始的方法添加就是了,只是多传一个icon就好了。

总结:最主要的就是addSingleClusterToMap()方法,这个方法在设置图标,然后还有cluster.getClusterItems()方法,这个方法能获得当前聚合点所有的内容。然后想实现什么自己改就可以了。虽然我没有看懂他是怎么实现的,但是确实可以改出来,嘿嘿嘿。只是下载图片的时候会耗时,在这个过程中地图会是白的,在考虑考虑怎么优化吧

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
uniapp是一款跨平台的移动应用开发框架,而高德地图是一款广泛使用的地图服务平台。在uniapp内置了高德地图,使得开发者可以方便地在应用使用地图功能。 点聚合是高德地图提供的一种功能,它可以将地图上的大量标注点聚合起来,以提升地图的可视化效果和交互体验。在开发应用时,我们可以通过uniapp内置的高德地图组件,结合点聚合功能,实现地图上大量标注点的高效展示。 要使用点聚合功能,我们首先需要在应用引入高德地图组件,并设置地图的初始化参数,如地图心点坐标、缩放级别等。然后,我们可以通过调用高德地图的Marker对象来添加各个标注点,并设置每个标注点的经纬度、图标等属性。 当我们需要使用点聚合功能时,可以通过高德地图的Cluster对象来实现。我们可以将所有的标注点传递给Cluster对象,并设置聚合样式、点击事件等。Cluster对象会根据一定的规则将附近的标注点聚合在一起,形成一个聚合点。当用户点击聚合点时,可以通过点击事件获取到该聚合点下的所有标注点,以便进一步操作或展示。 通过在uniapp使用内置的高德地图组件和点聚合功能,我们可以轻松实现地图的展示和标注点的聚合,为用户提供更好的地图浏览体验。利用这些功能,我们可以开发一些基于地图的应用,如地点检索、附近的人等功能,丰富用户的使用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值