生成二维码,并且保存,指定位置的view成图片,并且保存到本地相册
效果图;

保存的图片效果是:

保存到本地的,是整个视图,不只是单单的二维码的图片,
在了解的一番过程之后,我知道了,
1.首先要去获取保存图片的写入权限;(使用 https://github.com/getActivity/XXPermissions)
2. 保存指定view的bitmap (这一步,)
3.保存到相册
直接上代码:
private val mBitmapUrl = "wwwww://WL3687211525992373----"
private lateinit var mBitmap: Bitmap
使用的使用的是 https://github.com/bingoogolapple/BGAQRCode-Android 这个里面的类 去生成二维码内容
同时,这个地方,是耗时操作,就使用了一下kotli的协程处理耗时操作了
lifecycleScope.launch {
val qrcodeBitmap = QRCodeEncoder.syncEncodeQRCode(mBitmapUrl, SizeUtils.dp2px(200f))
mBitmap = qrcodeBitmap
mDatabind.imageViewScanPay.load(qrcodeBitmap)
}
3. 点击下载指定视图内容view到图库
mDatabind.textViewDownloadPicture.setOnClickListener {
//先判断存储权限是否授权
if (!XXPermissions.isGranted(
this@RechargeQrCodeActivity,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
)
    ) {
XXPermissions.with(this@RechargeQrCodeActivity)
.permission(Permission.WRITE_EXTERNAL_STORAGE)
.request { permissions, all ->
if (all) {
// 保存图片
saveViewToImg(mDatabind.viewTop,this@RechargeQrCodeActivity)
} else {
ToastUtils.showShort("保存权限获取失败!")
}
}
} else {
// 保存图片
saveViewToImg(mDatabind.viewTop,this@RechargeQrCodeActivity)
}
}
/**
* 把view保存成图片
*/
private fun saveViewToImg(mView:View,mContext:Context){
// 获取图片的某布局
mView.isDrawingCacheEnabled = true
mView.buildDrawingCache()
lifecycleScope.launch {
// 获取图片
val drawingCache = mView.drawingCache
saveImg(drawingCache)
// 保存事后释放资源
mView.isDrawingCacheEnabled = false
mView.destroyDrawingCache()
}
}
/**
* 保存图片到本地
*/
private fun saveImg(bitmap: Bitmap) {
val fileName = "qr_" + System.currentTimeMillis() + ".png"
val save2Album = ImageUtils.save2Album(bitmap, fileName, Bitmap.CompressFormat.PNG, false)
if (save2Album != null) {
ToastUtils.showShort("保存成功")
} else {
ToastUtils.showShort("保存失败")
}
}
在保存图片这里,这里用到了一个库: implementation 'com.blankj:utilcodex:1.31.0' ImageUtls.sava2Album 进行图片的保存;
特别注意:在保存整个白色视图view,做完图片进行保存的时候,我原来的视图是直接用约束布局进行写的,视图都是平级关系;
这样就会导致,视图,只是保存了白色的view背景色视图,view上面的内容都是没有了,
后来,通过探索,知道了,这个地方是使用包裹内容的视图的,所以就在里面首先用了一层cardView , 再到里面用了一层,线性布局,这样就是有层级关系了,
视图就正常显示;
原先错误的视图:--- 也不能说是错误,只是不适合,这里的

后面修改后的视图关系

完成整个流程;
参考文章:
https://blog.csdn.net/xiayiye5/article/details/115251706

生成二维码,并且保存,指定位置的view成图片,并且保存到本地相册的更多相关文章
- windows使用python3.4生成二维码
		
1.首先下载qrcode库 使用pip命令: pip install qrcode python3.x以上的版本默认是安装好pip的,如果出现无法找到pip指令的信息的话,则需要首先安装pip. 2. ...
 - qr 生成二维码
		
package com.common; import com.swetake.util.Qrcode; import jp.sourceforge.qrcode.QRCodeDecoder; impo ...
 - iOS开发——高级技术&生成二维码
		
生成二维码 因为项目里需要新增个功能,该功能用到了二维码技术.于是我便查阅了资料,先学习了二维码的生成. 我们使用libqrencode库来生成二维码.下载地址http://download.cs ...
 - Web程序-----批量生成二维码并形成一张图片
		
需求场景:客户根据前台界面列表所选择的数据,根据需要的信息批量生成二维码并形成一张图片,并且每张图片显示的二维码数量是固定的,需要分页(即总共生成的二维码图片超出每页显示的需另起一页生成),并下载到客 ...
 - Node.js在指定的图片模板上生成二维码图片并附带底部文字说明
		
在Node.js中,我们可以通过qr-image包直接在后台生成二维码图片,使用方法很简单: var qr = require('qr-image'); exports.createQRImage = ...
 - java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)
		
最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...
 - Android生成二维码--保存和分享二维码图片
		
之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...
 - 二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...
		
版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任. https://blog.csdn.net/lidew521/article/details/244418 ...
 - .NET 采用 SkiaSharp 生成二维码和图形验证码及图片进行指定区域截取方法实现
		
在最新版的 .NET 平台中,微软在逐步放弃 System.Drawing.Imaging ,给出的理由如下: System.Drawing命名空间对某些操作系统和应用程序类型有一些限制. 在Wind ...
 
随机推荐
- Nextcloud fpm 版在 Dokcer 下安装踩坑
			
安装 首先到 https://registry.hub.docker.com/_/nextcloud 获取 Nextcloud 的示例 docker-compose version: '2' volu ...
 - Android 12(S) 图形显示系统 - 解读Gralloc架构及GraphicBuffer创建/传递/释放(十四)
			
必读: Android 12(S) 图形显示系统 - 开篇 一.前言 在前面的文章中,已经出现过 GraphicBuffer 的身影,GraphicBuffer 是Android图形显示系统中的一个重 ...
 - Servlet:浏览器下载文件时文件名为乱码问题
			
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...
 - JDBC 能否处理 Blob 和 Clob?
			
Blob 是指二进制大对象(Binary Large Object),而 Clob 是指大字符对象 (Character Large Objec),因此其中 Blob 是为存储大的二进制数据而设计的, ...
 - kafka生产者网络层总结
			
1 层次结构 负责进行网络IO请求的是NetworkClient,主要层次结构如下 ClusterConnectionStates报存了每个节点的状态,以node为key,以node的状态为value ...
 - flash的TotalFrames显示undefined
			
通过js来操作flash的时候,获取到总帧数的是属性.TotalFrames,而不是属性TotalFrames().在asp.net中,js放在最后可以在一定程度上避免当前flash没有加载完,导致获 ...
 - Vue报错之"[Vue warn]: Invalid prop: type check failed for prop "jingzinum". Expected Number with value NaN, got String with value "fuNum"."
			
一.报错截图 [Vue warn]: Invalid prop: type check failed for prop "jingzinum". Expected Number w ...
 - Mybatis-Plus 如何实现一对多关系 举例 用户与角色
			
Mybatis-Plus 一对多Mybatis-Plus 不写一句sql语句实现一对多 首先来看效果 Mysql数据库 用户表 角色表 用户与角色的中间表 中间表如下 将三张表通过Mybatis Pl ...
 - 《Advanced Bash-Scripting Guide》 in Chinese  高级Bash脚本编程指南》Revision 10中文版
			
<Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...
 - 1. 了解Git和Github
			
1. 了解Git和Github 1.1 什么是Git Git是一个免费.开源的版本控制软件 1.2 什么是版本控制系统 版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况得系统. ...