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

news/2024/12/22 12:20:20/

一、不包含自定义控件

地图 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.ppmy.cn/news/1106095.html

相关文章

03JVM_类加载

一、类加载与字节码技术 1.类文件结构 2.字节码指令 3.编译期处理 4.类加载阶段 5.类加载器 6.运行期优化 1.类文件结构 类文件结构 1.1 魔数magic 介绍 每个java class文件的前4个字节是魔数:0x CAFEBABE。魔数作用在于分辨出java class文件和非java clas…

【AI理论学习】语言模型Performer:一种基于Transformer架构的通用注意力框架

语言模型Performer:一种基于Transformer架构的通用注意力框架 Performer论文解读Regular Attention MechanismFAVOR:通过矩阵相关性实现快速注意力 Attention的时间复杂性绕过softmax瓶颈通过Gaussian kernel求Softmax kernel寻找更稳定的Softmax内核使用…

一维的差分

差分的方法 差分实际上是前缀和的逆运算 ,这个关系和 积分与求导 的关系类似 例如有数组 ...... 和构造数组 ...... 我们要使得a数组是b数组的前缀和 ...... 那么该如何构造b数组呢? 令 , …

JWT 使用教程 授权 认证

JWT 1.什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally s…

【已解决】Splunk 8.2.X 升级ES 后红色报警

1: 背景: 由于splunk ES 占有很大的computing resource, 所以,Splunk ES 升级到7.1.1 后,有红色的alert. 2: 解决方法: 降低iowait 的 threshold: Investigation The default threshold setting for IOWait is pre-set to a low value and may not be relevant to the …

MediaCodec源码分析 configure流程

前言 本文梳理MediaCodec configure流程,基于7.0代码,这里只分析AVC和HEVC的视频硬解,流程图如下。 代码见: frameworks/base/media/java/android/media/MediaCodec.java frameworks/base/media/jni/android_media_MediaCodec.h frameworks/base/media/jni/android_media_…

【算法题】1462. 课程表 IV

题目: 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。 有的课会有直接的先修课程&#x…

ABB机器人6700系列更换SMB电池的具体方法和步骤

ABB机器人6700系列更换SMB电池的具体方法和步骤 前提: 当需要更换电池时,会显示低电量警告“38213 Battery charge low(电池电量低)” 注意事项: 为了避免机器人不同步,在保持机器人控制柜上电的情况下进行电池的更换,否则可能会导致机器人丢失位置数据。 SMB电池的具体…