Android将自定义View保存为Bitmap图片

Android将自定义View保存为Bitmap图片

 private void createPdfImg() {//创建待分享的viewView view = LayoutInflater.from(getContext()).inflate(R.layout.ecg_pdf_view, null);PdfEcgWaveView waveView = view.findViewById(R.id.ecg_wave_view2);PdfEcgWaveView.DATA_PRE_SECOND = sampleRate;getAndSavePdfImg(view, waveView, 1);}int page;// 分页private void getAndSavePdfImg(View view, PdfEcgWaveView waveView, int i) {waveView.setGain(gain);waveView.setPagerSpeed(paperSpeed + 1);Log.d("列表大小", ecgWaveList.size() + "");//采样率是512个数据/秒,我们取8秒生成一张图,从而得到512*8=4096int dataSize = sampleRate * 8;page = (int) Math.ceil((double) ecgWaveList.size() / dataSize);List<Float> pdfItem = new ArrayList<>();for (int j = 0; j < page; j++) {pdfItem.clear();for (int k = j * dataSize; k < dataSize + dataSize * j; k++) {if (k < ecgWaveList.size()) {pdfItem.add(ecgWaveList.get(k));}}waveView.preparePoints(pdfItem);layoutView(view, waveView, pdfItem);getAndSaveBitmap(view, j);}Log.d("ecgsize", ecgWaveList.size() + "");}protected void layoutView(View v, PdfEcgWaveView waveView, List<Float> ecgItem) {int a = (int) (sampleRate * 8 * ecgWaveView.getDataSpacing());Log.d("viewSize", ecgItem.size() + "");Log.e("bitmap", "a=" + a + "-dataSpacing=" + ecgWaveView.getDataSpacing() + "-sampleRate=" + sampleRate);v.layout(0, 0, a, SizeUtils.dp2px(180));int measuredWidth = View.MeasureSpec.makeMeasureSpec(a, View.MeasureSpec.EXACTLY);int measuredHeight = View.MeasureSpec.makeMeasureSpec(SizeUtils.dp2px(180), View.MeasureSpec.EXACTLY);v.measure(measuredWidth, measuredHeight);v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());}/*** 创建和保存bitmap*/protected void getAndSaveBitmap(View v, int i) {Log.e("bitmap","width="+v.getWidth()+"height="+v.getHeight());Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(),Bitmap.Config.ARGB_8888);// 利用bitmap生成画布Canvas canvas = new Canvas(bitmap);// 把view中的内容绘制在画布上v.draw(canvas);saveBitmap(bitmap, i);}/*** 保存并压缩图片** @param bitmap*/public void saveBitmap(Bitmap bitmap, int i) {Log.d("hehe", "保存图片");singleThreadExecutor.execute(new Runnable() {@Overridepublic void run() {String path = Constants.PDF_IMG_ROTE_PATH + "/img" + i + ".png";File file = new File(path);try {FileOutputStream stream = new FileOutputStream(file);//压缩图片bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream);//释放资源stream.flush();stream.close();} catch (Exception e) {disProgressDialog();ToastUtil.showLongToast(StringUtils.getString(R.string.failed_report));Log.d("hehe", e.getLocalizedMessage());}}});}

exg_pdf_view.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:background="@color/write"android:layout_height="@dimen/dp_200"><com.kl.commonbase.views.ecg.EcgBackgroundViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/write"app:largeGridColor="#ff0022"app:smallGridColor="#ff0033" /><com.kl.commonbase.views.ecg.PdfEcgWaveViewandroid:id="@+id/ecg_wave_view2"android:layout_width="wrap_content"android:layout_height="@dimen/dp_200"app:scrollable="true"app:waveColor="@color/black"app:waveStrokeWidth="@dimen/dp_1" />
</FrameLayout>

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

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

相关文章

【数据结构 | 二叉树入门】

数据结构 | 二叉树入门 二叉树概念&#xff1a;二叉树特点&#xff1a;二叉树的基本形态特殊二叉树满二叉树完全二叉树 二叉树的存储结构二叉树的遍历先序遍历中序遍历后序遍历 计算二叉树的节点个数计算叶子节点的个数树的高度求第k层节点个数 二叉树概念&#xff1a; 如下图…

怎么将营业执照图片转为excel表格?(批量合并识别技巧)

一、为何要将营业执照转为excel表格&#xff1f; 1、方便管理&#xff1a;将营业执照转为excel格式&#xff0c;可以方便地进行管理和整理&#xff0c;快速查找需要的信息。 2、数据处理&#xff1a;Excel可以提供丰富的计算和数据分析功能&#xff0c;转化为excel后方便数据…

解决递归问题的六种方法

许多软件工程师在编程面试中遇到递归问题。 如果你想成为善于解决递归问题&#xff0c;学习这6个模板&#xff1a; 1.迭代 任何可以用循环解决的问题也可以用递归解决。 有时候递归提供了一个更简洁和优雅的解决方案&#xff0c;即使效率较低。 范例&#xff1a; - 按逆序遍…

12.字符串和正则表达式

使用正则表达式 正则表达式相关知识 在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要&#xff0c;正则表达式就是用于描述这些规则的工具&#xff0c;换句话说正则表达式是一种工具&#xff0c;它定义了字符串的匹配模式&#xff08;…

Ubuntu上安装VMware+win11系统手册

Ubuntu安装vmware 下载&#xff1a; Linux 版下载地址&#xff1a;https://www.vmware.com/go/getworkstation-linux 安装&#xff1a; sudo chmod x VMware-Workstation-Full-17.5.0-22583795.x86_64.bundle 执行安装命令&#xff1a; sudo ./VMware-Workstation-Full-17.5.0…

pytorch 分布式 Node/Worker/Rank等基础概念

分布式训练相关基本参数的概念如下: Definitions Node - A physical instance or a container; maps to the unit that the job manager works with. Worker - A worker in the context of distributed training. WorkerGroup - The set of workers that execute the same f…

AArch64 memory management学习(二)

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。AArch64 memory management学习一共分为两章&#xff0c;这是第二章。…

python基础教程八(循环1)

1. while循环 为避免多次重复的代码&#xff0c;我们会用到循环 while (condition): 执行语句 while循环的结构非常简单只要条件满足就一直循环直到&#xff0c;条件不满足为止。 例子如下&#xff1a; x1 while x<100:print(x)x1结果就是最简单的输出1-100的数字 while…

西电期末考点总结

一.“打擂台” 介绍 打擂台用于找到一个数组中的最值问题&#xff0c;先设置一个虚拟擂主&#xff0c;并保证他是“最弱的”&#xff0c;然后遍历数组&#xff0c;找到“更强的”数据&#xff0c;就交换擂主&#xff0c;“打”到最后的“擂主”就是最值数据 相关题目 1004.…

Vant2组件库van-list+Toast下拉加载滚动条回顶问题

目录 List 列表 Toast 轻提示 解决方案 1、不使用 Toast 的 加载提示 2、修改调整 pointer-event 属性值 3、判断是否为第一次加载再使用 背景 &#xff1a; 移动端项目 开发时&#xff0c;有数据长列表展示的场景需求&#xff0c;此时就用到了 Vant2 组件库里面的 <v…

Tsmaster使用笔记整理

选择厂商 根据你所选择的CAN分析仪的厂商&#xff0c;确定你的厂商设备设置。 我一般会选择PEAK&#xff0c;和 ZLG多一点&#xff0c;其他的没有用过。除了上图中的&#xff0c;市面上的CAN分析仪还有CANanlyst、广成科技、创芯科技等&#xff0c;但它们都不能在Tsmaster上使…

电源芯片浪涌电流如何产生?该怎么测试?

对于电源芯片的设计和制造商来说&#xff0c;防止芯片受到电源干扰是非常重要的。为了保障芯片能正常稳定运行&#xff0c;浪涌测试无疑是必要的。本篇文章将全方位为你介绍浪涌电流如何产生以及如何测试的过程。 电源芯片浪涌电流的产生原因 1.开关电源切换和电压突变 在电源开…

ATTCK视角下的信息收集:组策略信息收集

目录 什么是组策略&#xff1f; 本地组策略收集 域组策略收集 组策略存储收集 组策略对象收集 什么是组策略&#xff1f; Windows中的组策略&#xff08;Group Policy&#xff09;是一种管理和配置Windows操作系统的功能&#xff0c;它允许系统管理员对计算机和用户的行为…

详解汇编cll ret push pop 并附源码

一.call 实际上做了两次操作 1.push eip1&#xff0c;&#xff08;不能这么写&#xff09;保存返回地址 2.jmp 跳转到函数 二.ret 实际上做了两次操作和call 1.pop eip&#xff08;不能这么写&#xff09;&#xff0c;取出返回的地址 2. jmp 跳转到pop取出来的地址 三.push…

“华为杯“第四届中国研究生数学建模竞赛-D题:邮政运输网络中的邮路规划和邮车调度(附MATLAB代码实现)

目录 摘 要: 一、 问题的重述 二、 模型的基本假设 三、 模型的分析与求解

Leetcod面试经典150题刷题记录 —— 二叉树层次遍历篇

Leetcod面试经典150题刷题记录-系列Leetcod面试经典150题刷题记录——数组 / 字符串篇Leetcod面试经典150题刷题记录 —— 双指针篇Leetcod面试经典150题刷题记录 —— 矩阵篇Leetcod面试经典150题刷题记录 —— 滑动窗口篇Leetcod面试经典150题刷题记录 —— 哈希表篇Leetcod面…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -用户信息修改实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

Qt 6之五:创建菜单

Qt 6之五&#xff1a;创建菜单 Qt是一种跨平台的C应用程序开发框架&#xff0c;它提供了一套丰富的工具和库&#xff0c;可以帮助开发者快速构建跨平台的应用程序&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;和非GUI应用程序。 Qt 6之一&#xff1a;简介、安…

untiy使用http下载资源

文章目录 提醒下载一个资源并保存到本地下载一张图片 提醒 部分API需要将Unity的 Edit/PrejectSetting/Player/OtherSetttings/AConfiguration/ApiCompatibilityLevel 设为.NetFramework 才可以使用 下载一个资源并保存到本地 private IEnumerator DownloadFormServer_IE(st…

什么是编译程序和解释程序

一、编译程序 1、编译器接收源代码作为输入&#xff0c;它会一次性地将整个源代码程序转换成目标代码&#xff08;通常是机器语言或汇编语言&#xff09;&#xff0c;这个过程包括词法分析、语法分析、语义分析、优化以及最终的目标代码生成。2、编译后的目标代码是一个独立的…