Android 使用Scrollow作为Bitmap进行海报图片的生成

2024-03-20 18:38

本文主要是介绍Android 使用Scrollow作为Bitmap进行海报图片的生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

许久没有写博客了,就近来项目中遇到的问题进行一下总结,以备下次遇到能够快速处理

目前的功能就是布局转化为bitmap生成海报然后保存到相册可以进行分享功能。

效果图如下

 /*** 截取scrollview的屏幕** @param scrollView* @return*/public Bitmap getBitmapByView(ScrollView scrollView) {int h = 0;Bitmap bitmap = null;// 获取scrollview实际高度for (int i = 0; i < scrollView.getChildCount(); i++) {h += scrollView.getChildAt(i).getHeight();//获取scrollView的屏幕高度scrollView.getChildAt(i).setBackgroundColor(Color.parseColor("#ffffff"));}//如果传的参数不是NestedScrollView,则不需要循环遍历高度
//        h += scrollView.getHeight();//获取scrollView的屏幕高度
//        scrollView.setBackgroundColor(
//                    Color.parseColor("#ffffff"));// 创建对应大小的bitmapbitmap = Bitmap.createBitmap(scrollView.getWidth(), h,Bitmap.Config.RGB_565);final Canvas canvas = new Canvas(bitmap);//把创建的bitmap放到画布中去scrollView.draw(canvas);//绘制canvas 画布return bitmap;}/*** 压缩图片** @param image* @return*/public Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中image.compress(Bitmap.CompressFormat.JPEG, 100, baos);int options = 100;// 循环判断如果压缩后图片是否大于100kb,大于继续压缩while (baos.toByteArray().length / 1024 > 100) {// 重置baosbaos.reset();// 这里压缩options%,把压缩后的数据存放到baos中image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 每次都减少10options -= 10;}// 把压缩后的数据baos存放到ByteArrayInputStream中ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把ByteArrayInputStream数据生成图片Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);return bitmap;}/*** 保存到sdcard并返回路径地址** @param b* @return*/public String savePic(Bitmap b) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss",Locale.US);File file = Environment.getExternalStorageDirectory();// 如果文件不存在,则创建一个新文件if (!file.isDirectory()) {try {file.mkdir();} catch (Exception e) {e.printStackTrace();}}String fname = file.getAbsolutePath() + "/Pictures/" + sdf.format(new Date()) + "poster.png";File outFile = new File(fname);FileOutputStream fos = null;try {fos = new FileOutputStream(outFile);//获取FileOutputStream对象if (fos != null) {/*** 压缩图片* 第一个参数:要压缩成的图片格式* 第二个参数:压缩率* 第三个参数:压缩到指定位置*/boolean compress = b.compress(Bitmap.CompressFormat.PNG, 90, fos);if (compress) {//通知图库更新Intent intent = new Intent();intent.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);intent.setData(Uri.fromFile(outFile));sendBroadcast(intent);ToastUtil.showCenterToast("保存图片到相册成功");} else {ToastUtil.showCenterToast("保存图片到相册失败");}fos.flush();fos.close();//最后关闭此文件输出流并释放与此流相关联的任何系统资源。}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return fname;}
    Bitmap bitmap = compressImage(getBitmapByView(nestedScrollview));//截取View的屏幕大小并压缩图片String savePic = savePic(bitmap);//把获取到的Bitmap对象压缩图片保存到本地中sdcardimageView.setImageBitmap(bitmap);//在把获取到的Bitmap对象在imageView中显示出来Log.i(TAG, savePic);

 关于这个海报页面我之所以用scrollow作为父布局是因为我起初用线性布局或者相对布局时报存到手机里面,小屏手机就会显示不全,导致无法扫描二维码,因此我就改变了方式作为滑动的就需要保存长图,图片也不会出现不全问题,完美解决了问题.

但是吧这个还有一个小问题,有时候点击保存到相册无反应,这个问题下篇文章再介绍吧

这篇关于Android 使用Scrollow作为Bitmap进行海报图片的生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

MySQL分区表的具体使用

《MySQL分区表的具体使用》MySQL分区表通过规则将数据分至不同物理存储,提升管理与查询效率,本文主要介绍了MySQL分区表的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、分区的类型1. Range partition(范围分区)2. List partition(列表分区)3. H

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步