百度地图开发之点聚合功能

}

@Override

protected void onPause() {

mMapView.onPause();

super.onPause();

}

@Override

protected void onResume() {

mMapView.onResume();

super.onResume();

}

@Override

protected void onDestroy() {

mMapView.onDestroy();

super.onDestroy();

}

/**

  • 向地图添加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);

List items = new ArrayList();

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));

mClusterManager.addItems(items);

}

/**

  • 每个Marker点,包含Marker点坐标以及图标

*/

public class MyItem implements ClusterItem {

private final LatLng mPosition;

public MyItem(LatLng latLng) {

mPosition = latLng;

}

@Override

public LatLng getPosition() {

return mPosition;

}

@Override

public BitmapDescriptor getBitmapDescriptor() {

return BitmapDescriptorFactory

.fromResource(R.drawable.icon_gcoding);

}

}

@Override

public void onMapLoaded() {

// TODO Auto-generated method stub

ms = new MapStatus.Builder().zoom(9).build();

mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(ms));

}

}

基本的逻辑都在demo里面有所实现,我就不详细说了。 我说几点可能需要我们自己改动的一些细节。

1.地图级别

mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(Float.parseFloat(“10.8”)).build()));//设置缩放级别

2.设置聚合圆圈的点击事件

mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener() {

@Override

public boolean onClusterClick(Cluster cluster) {

float level = mBaiduMap.getMapStatus().zoom;

mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(level+1).build()));

return false;

}

});

这个我是点击聚合圆圈的时候 ,将地图级别放大一级,具体你们产品要求是什么样,自己在监听实现就好

3.设置聚合点圆圈样式

这个样式背景修改是在text_bubble.xml里面

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:orientation=“vertical”>

<com.baidu.mapapi.clusterutil.ui.RotationLayout

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:background=“@drawable/map_circle_bg”

android:orientation=“vertical”>

<TextView

android:id=“@+id/text”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center_horizontal”

android:paddingBottom=“5dp”

android:paddingLeft=“10dp”

android:paddingRight=“10dp”

android:paddingTop=“5dp”/>

</com.baidu.mapapi.clusterutil.ui.RotationLayout>

上面的   android:background=“@drawable/map_circle_bg”  这个就是自己定义的样式,我这个是写了一个带背景色的圆形

map_circle_bg.xml

<shape

xmlns:android=“http://schemas.android.com/apk/res/android”

android:shape=“oval”

android:useLevel=“false” >

<solid

android:color=“@color/green_theme” />

<size android:width=“6dp”

android:height=“6dp” />

颜色就自己改成自己的颜色就可以。

4.设置点击 mark点 弹出pop提示框

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener() {

@Override

public boolean onClusterItemClick(final BaiduItem item) {

TextView tv = new TextView(getApplicationContext());

tv.setBackgroundResource(R.drawable.icon_pop);

tv.setGravity(Gravity.CENTER_VERTICAL);

tv.setText(item.getName());

//定义用于显示该InfoWindow的坐标点

LatLng pt = new LatLng(item.getPosition().latitude, item.getPosition().longitude);

//创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量

InfoWindow mInfoWindow = new InfoWindow(tv, pt, -47);

//显示InfoWindow

mBaiduMap.showInfoWindow(mInfoWindow);

return false;

}

});

就是上面图三的提示框,这个需要注意的就是icon_pop这个图片用.9的图片,因为提示信息过多的时候可以自动适配。

5.设置修改marker点的 图片样式

大家看图中 我们的点出来的都是 红色和绿色的小房子,不是传统的 那种红色的小标注点

@Override

public BitmapDescriptor getBitmapDescriptor() {

if(state.equals(“1”)){

return BitmapDescriptorFactory.fromResource(R.drawable.icon_map_wkg);

}else if(state.equals(“2”)){

return BitmapDescriptorFactory.fromResource(R.drawable.icon_map_jg);

}else if(state.equals(“3”)){

return BitmapDescriptorFactory.fromResource(R.drawable.icon_map_wkg);

}else{

return BitmapDescriptorFactory.fromResource(R.drawable.icon_map_wkg);

}

}

这个state是自己new这个对象的时候,构造里面传一个值进来,用不同的值判断显示不同的标注icon。

最后给大家放上一个demo,是eclipse版本的。as版本的 官网下载下来的就是as的demo。

资源分享

  • 最新大厂面试专题

这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等

  • 对应导图的Android高级工程师进阶系统学习视频
    最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
icon。

最后给大家放上一个demo,是eclipse版本的。as版本的 官网下载下来的就是as的demo。

资源分享

  • 最新大厂面试专题

这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等

[外链图片转存中…(img-nxqXSY7W-1715344560142)]

  • 对应导图的Android高级工程师进阶系统学习视频
    最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!

[外链图片转存中…(img-2DAceDGv-1715344560143)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值