生成二维码,并且保存,指定位置的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 ...
随机推荐
- MySQL — 索引
目录 1.索引概述 2.索引结构 3.索引分类 4.索引语法 5.SQL 性能分析 5.1.执行频次 5.2.慢日志查询 5.3.profile 5.4.explain 6.索引使用规则 6.1.单列 ...
- Android 12(S) 图形显示系统 - BufferQueue的工作流程(十一)
题外话 我竟然已经写了这个系列的十一篇文章了,虽然内容很浅显,虽然内容很枯燥,虽然内容也许没营养,但我为自己的坚持点赞! 一.前言 前面的两篇文章,分别讲解了Producer的处理逻辑和queue b ...
- ASP.NET Core 6 Minimal API的模拟实现
Minimal API仅仅是在基于IHost/IHostBuilder的服务承载系统上作了小小的封装而已,它利用WebApplication和WebApplicationBuilder这两个类型提供了 ...
- Nginx 静态文件服务
Nginx 静态文件服务 我们先来看看最简单的本地静态文件服务配置示例: server { listen 80; server_name www.test.com; charset utf-8; ro ...
- 【网鼎杯】jocker--部分代码加壳逆向处理
Main函数,用户输入flag,长度为24位 Wrong函数进行了简单的异或操作 Omg函数进行异或操作,根据提示来看应该是假check Encrypt无法生成伪代码 发现有加壳以及自修改,下断点动调 ...
- Hashmap如何同步?
当我们需要一个同步的HashMap时,有两种选择: ●使用Collections.synchronizedMap(..)来同步HashMap. ●使用ConcurrentHashMap的 这两个选项之 ...
- Linux 网卡配置参数
网卡配置文件位于 /etc/sysconfig/network-scripts/ 目录下 网卡配置文件在RHEL5/6以eth为网卡文件的前缀,在RHEL7中以ifcfg为网卡文件的前缀 配置 解释 ...
- 创建Maven web工程
---恢复内容开始--- 第一步,启动Eclipse,依次打开菜单[File][New][Other] 找到目录Maven,选择Maven Project, 选择一个Archetype.这里创建Web ...
- Vuet.js规则详解,它是你不知道的强大功能?
Vuet.js是什么? Vuet.js是给Vue.js提供状态管理的一个工具,与vuex不同,它是一种崇尚规则定制的状态管理模式.事先将状态更新的规则写好,然后将规则注入到组件中,然后状态按照预订的规 ...
- 小程序开发之一(使用fly进行http封装)
原文地址:http://callmesoul.cn 下载fly js文件 fly小程序文档 /api/config.js 配置,主要配置全局的host url和request拦截和request拦截 ...