Android高德地图截屏功能(可包含自定义控件)

一、不包含自定义控件

地图 SDK 支持对当前屏幕显示区域进行截屏,可以对地图、覆盖物(包含信息窗口)、Logo进行截取屏幕,这其中不包括地图控件、Toast窗口。

详细示例如下:

 // 对地图进行截屏aMap!!.getMapScreenShot(object : OnMapScreenShotListener {override fun onMapScreenShot(bitmap: Bitmap) {}override fun onMapScreenShot(bitmap: Bitmap, status: Int) {try {val fos = FileOutputStream((Environment.getExternalStorageDirectory().toString() + "/test_1") + ".png")val b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)try {fos.flush()} catch (e: IOException) {e.printStackTrace()}try {fos.close()} catch (e: IOException) {e.printStackTrace()}val buffer = StringBuffer()if (b) buffer.append("截屏成功 ") else {buffer.append("截屏失败 ")}if (status != 0) buffer.append("地图渲染完成,截屏无网格") else {buffer.append("地图未渲染完成,截屏有网格")}ToastUtil.showShortToast(buffer.toString())} catch (e: FileNotFoundException) {e.printStackTrace()}}})

二、包含自定义控件

object ScreenShotHelper {/*** 组装地图截图和其他View截图,并且将截图存储在本地sdcard,需要注意的是目前提供的方法限定为MapView与其他View在同一个ViewGroup下** @param bitmap        地图截图回调返回的结果* @param viewContainer MapView和其他要截图的View所在的父容器ViewGroup* @param mapView       MapView控件* @param views         其他想要在截图中显示的控件*/fun saveScreenShot(bitmap: Bitmap,viewContainer: ViewGroup,mapView: MapView,vararg views: View?) {object : Thread() {override fun run() {val screenShotBitmap =getMapAndViewScreenShot(bitmap, viewContainer, mapView, *views)if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {val file =File(Environment.getExternalStorageDirectory().absolutePath + File.separator + "test1.png")try {val outputStream = FileOutputStream(file)screenShotBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)//根据自己需求,如果外边对bitmp还有别的需求就不要recycle的screenShotBitmap.recycle()bitmap.recycle()} catch (e: FileNotFoundException) {e.printStackTrace()}}}}.start()}/*** 组装地图截图和其他View截图,需要注意的是目前提供的方法限定为MapView与其他View在同一个ViewGroup下** @param bitmap        地图截图回调返回的结果* @param viewContainer MapView和其他要截图的View所在的父容器ViewGroup* @param mapView       MapView控件* @param views         其他想要在截图中显示的控件*/fun getMapAndViewScreenShot(bitmap: Bitmap?,viewContainer: ViewGroup,mapView: MapView,vararg views: View?): Bitmap {val width = viewContainer.widthval height = viewContainer.heightval screenBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)val canvas = Canvas(screenBitmap)canvas.drawBitmap(bitmap!!, mapView.left.toFloat(), mapView.top.toFloat(), null)for (view in views) {view!!.isDrawingCacheEnabled = truecanvas.drawBitmap(view.drawingCache, view.left.toFloat(), view.top.toFloat(), null)}return screenBitmap}
}
使用方式
  aMap!!.getMapScreenShot(object : OnMapScreenShotListener {override fun onMapScreenShot(bitmap: Bitmap) {}override fun onMapScreenShot(bitmap: Bitmap, status: Int) {ScreenShotHelper.saveScreenShot(bitmap, 根布局, v!!.routeMapView, 要显示的控件)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/135458.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2-x6-dag自定义vue组件节点

效果如图 官方案例 人工智能建模 DAG 图 vue2中自定义节点 代码 1.dag.json [{"id": "1","shape": "dag-node","x": 290,"y": 110,"data": {"label": "读数据","status&q…

【iOS】push与present Controller的区别

文章目录 前言一、push方法二、pop方法三、present方法四、dismiss方法五、dismiss多级的方法举例动画 前言 iOS推出与退出界面有两种方式——push与present,接下来笔者分别介绍这两种方式 一、push方法 SecondViewController *second [[SecondViewController all…

【C++】AVL树

个人主页:🍝在肯德基吃麻辣烫 我的gitee:C仓库 个人专栏:C专栏 文章目录 前言一、什么是AVL树?设计AVL树的原因 二、AVL树的性质三、二叉树节点的定义四、AVL树的插入旋转1)右单旋2)左单旋3&…

目标检测中生成锚框函数详解

%matplotlib inline import torch from d2l import torch as d2l torch.set_printoptions(2) # 让pytorch打印张量时,只打印到小数点后两位将设一张图片,宽和高为2,2 X torch.rand(size(1,3,2,2)) Y generate_anchors(X,sizes[0.75,0.5,0.25],ratios[…

HPC集群自动弹性扩缩的两种实现方式

常青藤 HPC常青园 2023-07-28 19:48 发表于北京 弹性扩缩技术正在成为HPC集群中的一项重要技术。它可以根据实际需求动态调整集群资源,应对用户负载的波动。对于运维团队来说,自动弹性扩缩能够减轻集群运维负担,提高集群资源利用率&#xff0…

小程序Saas平台源码:开启电商小程序新时代,可视化后台自由DIY的无限可能

在当今数字化的时代,小程序已成为各行各业开展业务的重要工具。尤其在电商领域,小程序能有效地缩短消费者与商品之间的距离,提升营销效率。给大家分享一款针对电商行业的小程序Saas平台源码,它具有一键生成电商小程序、可视化后台…

Go基础八股

【Go面试】Go slice深拷贝和浅拷贝_哔哩哔哩_bilibili 基础篇 1.Go方法值接收者和指针接收者的区别 简单言之就是是否会影响调用的结构体,方法接收者是指针会影响 2.返回局部变量的指针 一般来说,局部变量会在函数返回后被销毁,因此被返回…

flink的网络缓冲区

背景 在flink的taskmanager进行数据交互的过程中,网络缓冲区是一个可以提升网络交换速度的设计,此外,flink还通过网络缓冲区实现其基于信用值credit的流量控制,以便尽可能的处理数据倾斜问题 网络缓冲区 在flink中每个taskmana…

C++ 太卷,转 Java?

最近看到知乎、牛客等论坛上关于 C 很多帖子,比如: 2023年大量劝入C 2023年还建议走C方向吗? 看了一圈,基本上都是说 C 这个领域唯一共同点就是都使用 C 语言,其它几乎没有相关性。 的确是这样,比如量化交…

微信小程序遇到的一些问题及解决方法(设备安装)

微信小程序遇到的一些问题及解决方法 1、[js将字符串按照换行符分隔成数组](https://blog.csdn.net/pgzero/article/details/108730175)2、[vue byte数组](https://www.yzktw.com.cn/post/1202765.html)3、使用vant-weapp的文件上传capture"camera" 无法直接调用摄像…

OPC UA协议报文,基础介绍+Hello报文解析

消息主要分为:消息头和附加字段 通讯过程 协议标准第一部分进行总体介绍;协议标准第四部分有详细介绍通讯过程 流程介绍 整体流程 连接套接字》Hello》打开安全信道》创建会话》关闭安全信道》关闭套接字 订阅等事件 服务器审核行为 聚合的服务器审…

基于未知环境碰撞冲突预测的群机器人多目标搜索研究

源自:指挥与控制学报 作者:边晓荟 周少武 张红强 吴亮红 王汐 王茂 刘朝华 陈磊 “人工智能技术与咨询” 发布 摘 要 群机器人在未知动态环境下进行多目标搜索时,存在碰撞预测和搜索效率不高等问题。提出了一种碰撞几何锥和改进惯性权重…

中秋特辑:Java事件监听实现一个猜灯谜小游戏

众所周知,JavaSwing是Java中关于窗口开发的一个工具包,可以开发一些窗口程序,然后由于工具包的一些限制,导致Java在窗口开发商并没有太多优势(当然也有一些第三方的工具包也很好用),不过&#x…

一款适用于教培机构的微信CRM系统

在教育培训行业中,有效的客户关系管理(CRM)系统至关重要。微信作为一种流行的社交媒体平台,具有巨大的潜在价值,可以被用来提升教培机构的客户管理和销售效率。 一些教育培训行业存在的问题 ①每年开班收学员太多&…

二叉树的几个递归问题

我的主页:Lei宝啊 愿所有美好如期而遇 前言: 二叉树的递归是二叉树很重要的问题,几乎解决二叉树的问题都要使用递归,接下来我们将解决二叉树几个最基础的递归问题。 目录 前言: 二叉树的前序,中序&…

JDK jps命令复习

之前写过jdk命令工具的博文,下面复习jps命令; jps 是 Java Process Status Tool 的简称,它的作用是为了列出所有正在运行中的 Java 虚拟机进程和相关信息; jps 命令参数 -q 只输出进程 ID,省略主类的名称 -m 输出虚拟机进程启动时传递…

基于Java新枫之谷游戏攻略设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

数据结构---链表(java)

目录 1. 链表 2. 创建Node 3. 增加 4. 获取元素 5. 删除 6. 遍历链表 7. 查找元素是否存在 8. 链栈的实现 9. 链队的实现 1. 链表 数据存放在"Node"结点中 优点:不用考虑扩容和缩容的问题,实现了动态存储数据 缺点:没有…

在Python中 作用域与命名空间的坑

前言: 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1. 命名空间 1.1 什么是命名空间 Namespace命名空间,也称名字空间,是从名字到对象的映射。 Python中,大…

【多卡训练报错】:The server socket has failed to listen on any local network address.

错误: RuntimeError: The server socket has failed to listen on any local network address. The server socket has failed to bind to [::]:16664 (errno: 98 - Address already in use). The server socket has failed to bind to 0.0.0.0:16664 (errno: 98 -…