目录
1 Marker点聚合简介
地图上添加少量的Marker时还比较顺畅,如果添加大量Marker就会卡顿, BaiduMap添加了点聚合功能,可以通过缩小地图级别将多个定义的标注点聚合成一个标注点,如果放大地图级别将显示所有的标注点;
2 Marker点聚合集成
2.1 点聚合功能
BaiduMap SDK提供的BaiduLBS_Android.jar没有点聚合功能,但是SDK的案例中BaiduMapsApiASDemo项目中的
com.baidu.mapapi.clusterutil包下实现了点聚合功能;
2.2 点聚合集成
2.2.1 代码集成
把com.baidu.mapapi.clusterutil.*拷贝到项目中;
2.2.2 xml配置
1. 拷贝text_bubble.xml到项目layout文件中;
2. styles.xml添加
<style name="Bubble.TextAppearance.Dark" parent="android:TextAppearance.Medium">
<item name="android:textSize">14sp</item>
<item name="android:textColor">#ff7f7f7f</item>
</style>
<style name="Bubble.TextAppearance.Light" parent="Bubble.TextAppearance.Dark">
<item name="android:textColor">#ffeeeeee</item>
</style>
<style name="ClusterIcon.TextAppearance" parent="android:TextAppearance">
<item name="android:textColor">#ffeeeeee</item>
<item name="android:textSize">16sp</item>
<item name="android:textStyle">bold</item>
</style>
2.2.3 代码实现点聚合
1.添加一个MarkerClusterItem类继承ClusterItem
public class MarkerClusterItem implements ClusterItem{
private final LatLng mPosition;
public MarkerClusterItem(LatLng latLng) {
mPosition = latLng;
}
@Override
public LatLng getPosition() {
return mPosition;
}
@Override
public BitmapDescriptor getBitmapDescriptor() {
return BitmapDescriptorFactory
.fromResource(R.drawable.icon_gcoding);
}
}
2.创建点聚合
//初始化点聚合管理类
clusterManager = new ClusterManager(this,baiduMap);
// 添加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);
List<MarkerClusterItem> items = new ArrayList<MarkerClusterItem>();
items.add(new MarkerClusterItem(llA));
items.add(new MarkerClusterItem(llB));
items.add(new MarkerClusterItem(llC));
items.add(new MarkerClusterItem(llD));
items.add(new MarkerClusterItem(llE));
items.add(new MarkerClusterItem(llF));
items.add(new MarkerClusterItem(llG));
//点集合设置到Cluster管理类
clusterManager.addItems(items);
3.点聚合添加事件
//点聚合事件
baiduMap.setOnMapStatusChangeListener(clusterManager);
//Marker点击事件
baiduMap.setOnMarkerClickListener(clusterManager);
clusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener() {
@Override
public boolean onClusterClick(Cluster cluster) {
Toast.makeText(getApplicationContext(),"一共有:"+cluster.getSize()+"个点",
Toast.LENGTH_SHORT).show();
return false;
}
});
clusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener() {
@Override
public boolean onClusterItemClick(ClusterItem item)
{
Toast.makeText(getApplicationContext(),"点击了单个Item",Toast.LENGTH_SHORT).show();
return false;
}
});