当前位置: 首页 > news >正文

百度地图SDK Android版开发 7 覆盖物示例1

百度地图SDK Android版开发 7 覆盖物示例1

  • 前言
  • 界面布局
  • MapMarker类
    • 常量
    • 成员变量
    • 初始值
    • Marker点击事件
    • Marker拖拽事件
    • 创建覆盖物
    • 移除覆盖物
    • 设置属性
  • MapMarkerActivity类
    • 控件响应事件
  • 运行效果图

前言

文本介绍Marker的常用属性、交互和碰撞示例。

示例功能如下:

  • 可设置Marker点击、拖拽、透明、旋转、可见、平贴、碰撞和POI碰撞属性状态;
  • 在地图上创建多个满足上述属性状态的Marker;
  • Marker点击事件和拖拽事件处理。

界面布局

布局

  • 布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="MapMarkerActivity"><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="0dp"android:clickable="true"app:layout_constraintBottom_toTopOf="@id/bottomView"app:layout_constraintTop_toTopOf="parent" /><androidx.appcompat.widget.LinearLayoutCompatandroid:id="@+id/bottomView"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintTop_toBottomOf="@id/bmapView"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/background_dark"android:gravity="center_horizontal"android:orientation="horizontal"android:paddingHorizontal="10dp"><CheckBoxandroid:id="@+id/clickable"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:checked="true"android:onClick="setMarkerFlag"android:text="点击"android:textColor="@color/white"android:textStyle="bold" /><CheckBoxandroid:id="@+id/draggable"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="setMarkerFlag"android:text="拖拽"android:textColor="@color/white"android:textStyle="bold" /><CheckBoxandroid:id="@+id/alpha"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="setMarkerFlag"android:text="透明"android:textColor="@color/white"android:textStyle="bold" /><CheckBoxandroid:id="@+id/rotate"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="setMarkerFlag"android:text="旋转"android:textColor="@color/white"android:textStyle="bold" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom|center"android:background="@android:color/background_dark"android:orientation="horizontal"android:paddingHorizontal="10dp"><CheckBoxandroid:id="@+id/visible"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:checked="true"android:onClick="setMarkerFlag"android:text="可见"android:textColor="@color/white"android:textStyle="bold" /><CheckBoxandroid:id="@+id/flat"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="setMarkerFlag"android:text="平贴"android:textColor="@color/white"android:textStyle="bold" /><CheckBoxandroid:id="@+id/joinCollision"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="setMarkerFlag"android:text="碰撞"android:textColor="@color/white"android:textStyle="bold" /><CheckBoxandroid:id="@+id/poiCollided"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="setMarkerFlag"android:text="POI碰撞"android:textColor="@color/white"android:textStyle="bold" /></LinearLayout></androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>

MapMarker类

以下是MapMarker部分代码。

常量

static final String CLICKABLE = "Clickable";
static final String DRAGGABLE = "Draggable";
static final String ALPHA = "Alpha";
static final String ROTATE = "Rotate";
static final String VISIBLE = "Visible";
static final String FLAT = "Flat";
static final String JOIN_COLLISION = "JoinCollision";
static final String POI_COLLIDED = "PoiCollided";

成员变量

// 覆盖物列表
List<Overlay> overlays = new ArrayList<>();
// 选中的状态
List<String> selectedFlags = new ArrayList<>();
// 坐标点集
List<LatLng> points = new ArrayList<>();

初始值

selectedFlags.add(CLICKABLE);
selectedFlags.add(VISIBLE);points.add(new LatLng(39.97923, 116.357428));
points.add(new LatLng(39.94923, 116.397428));
points.add(new LatLng(39.97923, 116.437428));
points.add(new LatLng(39.92353, 116.490705));

Marker点击事件

// 设置地图 Marker 覆盖物点击事件监听者,
// 自3.4.0版本起可设置多个监听对象,
// 停止监听时调用removeMarkerClickListener移除监听对象
map.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {//marker被点击时回调的方法//若响应点击事件,返回true,否则返回false//默认返回false@Overridepublic boolean onMarkerClick(Marker marker) {showToast("clickable marker");return true;}
});

Marker拖拽事件

// 设置 Marker 拖拽事件监听者
map.setOnMarkerDragListener(new BaiduMap.OnMarkerDragListener() {// 在Marker开始被拖拽时回调此方法,// 这个Marker的位置可以通过getPosition()方法获取 marker 被拖拽的Marker对象@Overridepublic void onMarkerDragStart(Marker marker) {}// 在Marker拖拽过程中回调此方法,// 这个Marker的位置可以通过getPosition()方法获取 marker 被拖动的Marker对象@Overridepublic void onMarkerDrag(Marker marker) {// 对marker处理拖拽逻辑}// 在Marker拖动完成后回调此方法,// 这个Marker的位置可以通过getPosition()方法获取 marker 被拖拽的Marker对象@Overridepublic void onMarkerDragEnd(Marker marker) {// 拖拽完成后更新位置int index = overlays.indexOf(marker);if (index != -1) {LatLng latLng = marker.getPosition();points.set(index, new LatLng(latLng.latitude, latLng.longitude));}}
});

创建覆盖物

public void addMarkers() {int[] icons = BubbleIcons.Alphabet;for (int i = 0; i < points.size(); ++i) {// 构建Marker图标BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(icons[i]);// 构建MarkerOption,用于在地图上添加MarkerMarkerOptions option = new MarkerOptions().position(points.get(i)) //必传参数.icon(bitmap); // 必传参数setOption(option, i, selectedFlags);// 在地图上添加Marker,并显示Marker marker = (Marker) map.addOverlay(option);overlays.add(marker);}
}
private void setOption(MarkerOptions option, int i, List<String> flags) {if (flags.contains(CLICKABLE))option.clickable(true);elseoption.clickable(false);if (flags.contains(DRAGGABLE))option.draggable(true); // 设置Marker覆盖物是否可拖拽。if (flags.contains(ALPHA))option.alpha(0.5f + 0.1f * i); // 设置Marker覆盖物的透明度。if (flags.contains(ROTATE))option.rotate(30 * i); // 设置Marker覆盖物的图片旋转角度,从正北开始,逆时针计算。if (flags.contains(VISIBLE))option.visible(true); // 设置Marker覆盖物是否可见。elseoption.visible(false);if (flags.contains(FLAT))option.flat(true); // 设置平贴地图,在地图中双指下拉查看效果。if (flags.contains(JOIN_COLLISION)) {option.isJoinCollision(true) // 设置marker参与碰撞.isForceDisPlay(i % 2 == 0) // 设置压盖时 marker强制展示.priority(9);  // 设置碰撞优先级为9}if (flags.contains(POI_COLLIDED)) {option.poiCollided(true); // 设置是否碰撞底图POI}
}

移除覆盖物

public void removeOverlay() {//map.removeOverLays(overlays);for (Overlay overlay : overlays)overlay.remove();overlays.clear();
}

设置属性

public void addFlag(String flag) {if (!selectedFlags.contains(flag))selectedFlags.add(flag);removeOverlay();addMarkers();
}public void removeFlag(String flag) {selectedFlags.remove(flag);removeOverlay();addMarkers();
}

MapMarkerActivity类

以下是MapMarkerActivity部分代码。

控件响应事件

public void setMarkerFlag(View view) {boolean checked = ((CheckBox) view).isChecked();int id = view.getId();String flag;if (id == R.id.clickable)flag = MapMarker.CLICKABLE;else if (id == R.id.draggable)flag = MapMarker.DRAGGABLE;else if (id == R.id.alpha)flag = MapMarker.ALPHA;else if (id == R.id.rotate)flag = MapMarker.ROTATE;else if (id == R.id.visible)flag = MapMarker.VISIBLE;else if (id == R.id.flat)flag = MapMarker.FLAT;else if (id == R.id.joinCollision)flag = MapMarker.JOIN_COLLISION;else if (id == R.id.poiCollided)flag = MapMarker.POI_COLLIDED;elsereturn;if (checked)mapMarker.addFlag(flag);elsemapMarker.removeFlag(flag);
}

运行效果图

效果图


http://www.mrgr.cn/news/2640.html

相关文章:

  • Flask 线上高并发部署方案实现
  • 2024.08.13 校招 实习 内推 面经
  • 周易测算系统开发:融合古典智慧与现代技术的创新实践
  • ShareSDK Twitter
  • SpringSecurity6
  • 运维学习————nginx2-配置详解及负载均衡
  • C#使用Modbus TCP通讯PLC,实现读写寄存器
  • 【css】水平对齐方式(justify、text-align、display: flex;)
  • 响应式Web设计:纯HTML和CSS的实现技巧-2
  • 谷粒商城实战笔记-225~226-商城业务-认证服务-分布式session不共享不同步问题
  • <STC12G12K128入门第十一步>任意按键控制进入USB ISP下载模式
  • 如何在项目管理中完成项目立项?
  • Git 课程任务
  • Qt第十六章 多媒体Multimedia
  • SOA 软件中间件浅析
  • Flink常用转换算子使用教程(DataSTream API)
  • Floyd算法(最短路问题)
  • 【论文学习与撰写】快捷搜索指令filetype:pdf,搜索引擎关键词搜索pdf格式文件或者word格式文件。文献搜索方法大全。
  • 集团数字化转型方案(四)
  • 性能基础之硬盘性能知识必知必会