Android百度地图-点聚合-的使用详细步骤

今天项目因为需要在地图上加载上千个marker,造成了卡顿,所以需要继承百度地图的点聚合,那么来吧跟着步骤来:

一、集成百度地图SDK

这一步很简单就不细说了,只要带基础地图的SDK 就有聚合的功能。

二、下载百度地图Demo

因为关于聚合的实例,必须参照官方Demo的样子来、所以下载下来
需要拷贝的地方
1、clusterutil这个包全部拷贝过来
在这里插入图片描述
··注意1、记得报名全部改成自己的
···注意2、其中MyItem这个类是自定义marker样式用的,也可以直接写在自己的Activity或Fragment内部

/**
 * 每个Marker点,包含Marker点坐标以及图标
 */
public class MyItem implements ClusterItem {
private final LatLng mPosition;
private final String mName;
private final String mNum;
//构造1、经纬度2、name和num为自定义的内容
public MyItem(LatLng latLng,String name,String num) {
    mPosition = latLng;
    mName = name;
    mNum = num;
}
//获取marker的经纬度
@Override
public LatLng getPosition() {
    return mPosition;
}
//marker为图片
@Override
public BitmapDescriptor getBitmapDescriptor() {
     
    return BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
}

/*    也可以自定义一个布局来显示Marker这两种都额可以
@Override
    public BitmapDescriptor getBitmapDescriptor() {
        View inflate = View.inflate(this, R.layout.item_layout, null);
        TextView viewById1 = inflate.findViewById(R.id.XXX);
        View viewById2 = inflate.findViewById(R.id.XXX);
        View viewById3 = inflate.findViewById(R.id.XXX);
        viewById1.setText(mName);
        viewById2.setText(mNum);
        return BitmapDescriptorFactory.fromView(inflate);
    }
    */



}

2、anim包中
在这里插入图片描述
3、layout中text_bubble.xml,需要注意里面的控件需要换成自己的报名。
在这里插入图片描述

三、开始写

1、初始化 地图

mMapView = (MapView) findViewById(R.id.bmapView);
    mMapStatus = new MapStatus.Builder().target(new LatLng(39.914935, 116.403119)).zoom(8).build();
    mBaiduMap = mMapView.getMap();
    mBaiduMap.setOnMapLoadedCallback(this);
    mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mMapStatus));

2、

// 定义点聚合管理类ClusterManager
    mClusterManager = new ClusterManager<MyItem>(this, mBaiduMap);
    // 添加Marker点
    addMarkers();
    // 设置地图监听,当地图状态发生改变时,进行点聚合运算
    mBaiduMap.setOnMapStatusChangeListener(mClusterManager);
    // 设置maker点击时的响应
    mBaiduMap.setOnMarkerClickListener(mClusterManager);
    //聚合圈点击
    mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<MyItem>() {
        @Override
        public boolean onClusterClick(Cluster<MyItem> cluster) {
            Toast.makeText(MarkerClusterDemo.this, "有" + cluster.getSize() + "个点", Toast.LENGTH_SHORT).show();
            return false;
        }
    });
//每隔marker点击
    mClusterManager.setOnClusterItemClickListener(new  ClusterManager.OnClusterItemClickListener<MyItem>() {
        @Override
        public boolean onClusterItemClick(MyItem item) {
            Toast.makeText(MarkerClusterDemo.this, "点击单个Item", Toast.LENGTH_SHORT).show();
            return false;
        }
    });
    mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
        //marker被点击时回调的方法
        //若响应点击事件,返回true,否则返回false
        //默认返回false
        @Override
        public boolean onMarkerClick(Marker marker) {
            Log.i("打印",marker.getPosition().latitude+"");
            return true;
        }
    });

3、// 添加Marker点的方法

   	  /**
 * 向地图添加Marker点
 */
public void addMarkers() {
    // 添加Marker点
    LatLng llA = new LatLng(39.963175, 116.400244);
    LatLng llB = new LatLng(39.942821, 116.369199);
    LatLng llC = new LatLng(39.939723, 116.425541);
    LatLng llD = new LatLng(39.906965, 116.401394);
    LatLng llE = new LatLng(39.956965, 116.331394);
    LatLng llF = new LatLng(39.886965, 116.441394);
    LatLng llG = new LatLng(39.996965, 116.411394);
    LatLng llG1 = new LatLng(39.996165, 116.411394);
    LatLng llG2 = new LatLng(39.996265, 116.411394);
    LatLng llG3 = new LatLng(39.996365, 116.411394);

    List<MyItem> items = new ArrayList<MyItem>();
    items.add(new MyItem(llA));
    items.add(new MyItem(llB));
    items.add(new MyItem(llC));
    items.add(new MyItem(llD));
    items.add(new MyItem(llE));
    items.add(new MyItem(llF));
    items.add(new MyItem(llG));
    items.add(new MyItem(llG1));
    items.add(new MyItem(llG2));
    items.add(new MyItem(llG3));

    mClusterManager.addItems(items);
}

这里就已经可以正常的使用了
也就是说直接在mClusterManager这个类里addItems(List)就可以了 成组添加

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值