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

news2024/11/19 7:29:40

一、不包含自定义控件

地图 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.width
        val height = viewContainer.height
        val 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 = true
            canvas.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.coloradmin.cn/o/1001238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ajax day3

3、将普通对象转为查询参数字符串形式: 创建URLSearchParams参数,再用toString方法转为字符串 4、xhr对象 请求参数:body参数 5、promise promise对象一旦被兑现或拒绝,就是已敲定了,状态无法再被改变。故此处先执行…

基于Python和mysql开发的智慧校园答题考试系统(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的智慧校园答题考试系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都…

第十章 数组和指针

本章介绍以下内容: 关键字:static 运算符:&、*(一元) 如何创建并初始化数组 指针(在已学过的基础上)、指针和数组的关系 编写处理数组的函数 二维数组 人们通常借助计算机完成统计每月的支出…

konisGraph学习。复杂查询优化记录

最近有需求是查两个公司之间的投资关系 比如 a和b之间有哪些直接投资和间接投资。 例如 a->b a->e->b a->c->d->b b->f->a 需求是查出7跳以内的ab之间的投资关系 v的标签是company_name,属性是company_name ,eid 其中ideid e的标签是inv…

恒林家居引入纷享销客CRM系统,领跑家居行业营销数字化进程

近日,恒林家居股份有限公司((股票代码:603661以下简称为“恒林家居”)携手纷享销客在湖州召开了CRM项目启动会。双方领导及核心项目人员齐聚一堂,展开了深度交流并达成了重要共识。 作为家居行业的领军企业…

查看创建好的数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: show create database 数据库名称; 案列:查看testing数据库信息 mysql> show create database testing; ------------------------…

源代码防泄密和工控安全方案简介

客户情况 某新能源电池企业专业从事于新能源锂离子动力电池和储能电池的研发、生产和销售,具备电芯、模组、BMS及Pack的完整资源开发能力。公司致力于通过持续不断地改进电池技术,为全球锂离子动力和储能领域提供数字化精准高效的新能源解决方案。 该企…

【Spring Boot 源码学习】OnClassCondition 详解

Spring Boot 源码学习系列 OnClassCondition 详解 引言往期内容主要内容1. getOutcomes 方法2. 多处理器拆分处理3. StandardOutcomesResolver 内部类4. getMatchOutcome 方法 总结 引言 上篇博文带大家从源码深入了自动配置过滤匹配父类 FilteringSpringBootCondition&#x…

说完 Java 的 Abstract 后再来说说接口 (interface )

如你对 Abstract 修饰的抽象类不是非常了解的话,请自行先考古下。 这篇文章需要对 Java 定义过的抽象类有一些基本的了解才可以。 抽象类和抽象方法 用 Abstract 修饰的类,叫做抽象类,那么用 Abstract 修饰的方法叫做抽象方法。 在 Java 中…

LabVIEW更改Tab所选标签的颜色

LabVIEW更改Tab所选标签的颜色 在开发过程中,有时会出现要将不同tab页设置不同颜色的情况。此VI允许编程方式更改前面板选项卡控件上选项卡的颜色。它是突出显示所选选项卡的理想选择 在某些应用程序中,用户希望在按下时突出显示选项卡控件。此VI使用事…

算法从未放弃你,放弃你的只有你自己

在人生的旅程中,我们常常会遇到各种挫折和困难。有些人在面对困境时,会选择放弃,将责任归咎于命运或外部环境。然而,算法教给我们一个重要的道理:永远不要放弃 当我们遇到问题或挑战时,算法可以帮助我们找到…

AWT中常用组件

基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件(也可当做单选框组件使用) CheckboxGroup 用于将多个Checkbox 组件组合成一组, 一组 Checkbox 组件将只有一个可以 被选中 , 即全部变成单…

python 使用requests爬取百度图片并显示

爬取百度图片并显示 引言一、图片显示二、代码详解2.1 得到网页内容2.2 提取图片url2.3 图片显示 三、完整代码 引言 爬虫(Spider),又称网络爬虫(Web Crawler),是一种自动化程序,可以自动地浏览…

C++数据结构--红黑树

目录 一、红黑树的概念二、红黑树的性质三、红黑树的节点的定义四、红黑树结构五、红黑树的插入操作参考代码 五、代码汇总 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过…

数字花园的指南针:微信小程序排名的提升之道

微信小程序,是一片数字花园,其中各种各样的小程序竞相绽放,散发出各自独特的芬芳。在这个花园中,排名优化就像是精心照料花朵的园丁,让我们一同走进这个数字花园,探寻如何提升微信小程序的排名优化&#xf…

Idea项目爆红

解决办法: 方案一:重新加载Maven依赖 方案二:清除缓存 方案三: 在当前项目下执行以下命令,重新生成.iml文件 mvn idea:module

Hadoop的安装和使用,Windows使用shell命令简单操作HDFS

1,Hadoop简介 Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。 高可靠性。 高效性。 高可扩展性。 高容错性。 成本低。 运行在Linux平台上。 支持多种编程…

【Redis7】--2.十大数据类型

文章目录 Redis十大数据类型1.Key通用命令1.1keys *1.2EXISTS1.3DEL1.4EXPIRE1.5TTL1.6TYPE1.7DBSIZE1.8SELECT1.9MOVE1.10FLUSHDB1.11FLUSHALL1.12help1.13CONFIG 2.Redis十大数据类型2.1String2.1.1SET和GET2.1.2MSET和MGET2.1.3INCR、INCRBY2.1.4SETNX和SETEX2.1.5MSETNX2.1…

Android笔记(二十九):利用python自动生成多语言

背景 项目需要支持十几种多语言,而且每个版本的新功能ui都有很多地方需要多语言,如果手动添加非常耗时,于是设计了一个python脚本,通过excel表格转化多语言到项目values/strings文件内 步骤 android工程项目结构 脚本位于langu…

Unity实现用WASD控制一个物体前后左右移动-小白课程01

1 根据业务逻辑搭建场景 02 根据业务写代码 using System.Collections; using System.Collections.Generic; using UnityEngine;//实现让被挂在的物体往前移动 //按下W键往前移动,按下S键往后移动 public class RoleMove : MonoBehaviour { public float myspe…