高德地图SDK Android版开发 7 覆盖物示例1

2024-08-22 09:28

本文主要是介绍高德地图SDK Android版开发 7 覆盖物示例1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高德地图SDK Android版开发 7 覆盖物示例1

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

前言

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

示例功能如下:

  • 可设置Marker点击、拖拽、透明、旋转、可见、平贴属性状态;
  • 在地图上创建多个满足上述属性状态的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.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="0dp"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/map"><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" /></LinearLayout></androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>

MapMarker类

以下是MapMarker部分代码。

常量

public static final String CLICKABLE = "Clickable";
public static final String DRAGGABLE = "Draggable";
public static final String ALPHA = "Alpha";
public static final String ROTATE = "Rotate";
public static final String VISIBLE = "Visible";
public static final String FLAT = "Flat";

成员变量

// 覆盖物列表
List<BaseOverlay> 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点击事件监听接口。
map.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {// 当一个marker对象被点击时回调此方法。showToast("clickable marker");return true;}
});

Marker拖拽事件

// marker拖动事件监听接口
map.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {@Overridepublic void onMarkerDragStart(Marker marker) {// 当marker开始被拖动时回调此方法。}@Overridepublic void onMarkerDrag(Marker marker) {// 在marker拖动过程当中回调此方法。}@Overridepublic void onMarkerDragEnd(Marker 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 = map.addMarker(option);if (selectedFlags.contains(CLICKABLE))marker.setClickable(true); // 设置Marker覆盖物是否可以点击elsemarker.setClickable(false);overlays.add(marker);}
}private void setOption(MarkerOptions option, int i, List<String> flags) {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.rotateAngle(30 * i); // 设置Marker覆盖物的图片旋转角度,从正北开始,逆时针计算。if (flags.contains(VISIBLE))option.visible(true); // 设置Marker覆盖物是否可见。elseoption.visible(false);if (flags.contains(FLAT))option.setFlat(true); // 设置Marker覆盖物是否平贴地图。
}

移除覆盖物

public void removeOverlay() {// 从地图上删除所有的覆盖物(marker,circle,polyline 等对象),// 但myLocationOverlay(内置定位覆盖物)除外。boolean isKeepMyLocationOverlay = true;map.clear(isKeepMyLocationOverlay);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;elsereturn;if (checked)mapMarker.addFlag(flag);elsemapMarker.removeFlag(flag);
}

运行效果图

在这里插入图片描述

这篇关于高德地图SDK Android版开发 7 覆盖物示例1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095882

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量