腾讯地图SDK Android版开发 7 覆盖物示例1

2024-08-23 09:44

本文主要是介绍腾讯地图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.tencent.tencentmap.mapsdk.maps.TextureMapViewandroid:id="@+id/mapview"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/mapview"><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<Removable> 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 TencentMap.OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {// 自定义Marker被点击showToast("clickable marker");return true;}
});

Marker拖拽事件

// 当 Marker 被拖动时回调接口
map.setOnMarkerDragListener(new TencentMap.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(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); // 设置标注是否可以被拖动if (flags.contains(ALPHA))option.alpha(0.5f + 0.1f * i); // 设置标注的透明度if (flags.contains(ROTATE)) {option.rotation(30 * i); // 设置标注的旋转角度option.clockwise(false); // 旋转角度是否沿顺时针方向}if (flags.contains(VISIBLE))option.visible(true); // 设置标注是否可见elseoption.visible(false);if (flags.contains(FLAT))option.flat(true); // 设置是不是3D标注,3D标注会随着地图倾斜面倾斜// MarkerCollisionItem.NONE 不碰撞// MarkerCollisionItem.MARKER 其他Marker 仅在设置OverlayLevel.OverlayLevelAboveLabels时生效// MarkerCollisionItem.POI 底图POIif (flags.contains(JOIN_COLLISION) && flags.contains(POI_COLLIDED)) {option.collisionBy(MarkerCollisionItem.MARKER, MarkerCollisionItem.POI);}if (flags.contains(JOIN_COLLISION)) {option.collisionBy(MarkerCollisionItem.MARKER);}if (flags.contains(POI_COLLIDED)) {option.collisionBy(MarkerCollisionItem.POI);}
}

移除覆盖物

// 清除地图上所有的标注类(Marker、Polyline、Polygon,TileOverlay除外)
map.clearAllOverlays();// 从地图移除覆盖物
for (Removable overlay : overlays) {if (!overlay.isRemoved())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);
}

运行效果图

在这里插入图片描述

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



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

相关文章

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C

什么是 Java 的 CyclicBarrier(代码示例)

《什么是Java的CyclicBarrier(代码示例)》CyclicBarrier是多线程协同的利器,适合需要多次同步的场景,本文通过代码示例讲解什么是Java的CyclicBarrier,感... 你的回答(口语化,面试场景)面试官:什么是 Java 的 CyclicBarrier?你:好的,我来举个例

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的