android view 转Bitmap 生成截图
项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将view 转成bitmap 再到图片分享,还有一种情况是将不可见的view 转成bitmap ,这种view是没有直接显示在界面上的,需要我们使用inflate 进行创建的view。
第一种
先看通过 DrawingCache 方法来截取普通的view,获取它的视图(Bitmap)。
private Bitmap createBitmap(View view) {view.buildDrawingCache();Bitmap bitmap = view.getDrawingCache();return bitmap;
}复制代码
这个方法适用于view 已经显示在界面上了,可以获得view 的宽高实际大小,进而通过DrawingCache 保存为bitmap。
第二种
但是 如果要截取的view 没有在屏幕上显示完全的,例如要截取的是超过一屏的 scrollview ,通过上面这个方法是获取不到bitmap的,需要使用下面方法,传的view 是scrollview 的子view(LinearLayout)等, 当然完全显示的view(第一种情况的view) 也可以使用这个方法截取。
public Bitmap createBitmap2(View v) {Bitmap bmp = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);Canvas c = new Canvas(bmp);c.drawColor(Color.WHITE);v.draw(c);return bmp;
}复制代码
第三种
还有一种 是view完全没有显示在界面上,通过inflate 转化的view,这时候通过 DrawingCache 是获取不到bitmap 的,也拿不到view 的宽高,以上两种方法都是不可行的。第三种方法通过measure、layout 去获得view 的实际尺寸。
public Bitmap createBitmap3(View v, int width, int height) {//测量使得view指定大小int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);int measuredHeight = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);v.measure(measuredWidth, measuredHeight);//调用layout方法布局后,可以得到view的尺寸大小v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());Bitmap bmp = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);Canvas c = new Canvas(bmp);c.drawColor(Color.WHITE);v.draw(c);return bmp;
}View view = LayoutInflater.from(this).inflate(R.layout.view_inflate, null, false);
//这里传值屏幕宽高,得到的视图即全屏大小
createBitmap3(view, getScreenWidth(), getScreenHeight());复制代码
另外写了个简易的保存图片的方法,方便查看效果的。
private void saveBitmap(Bitmap bitmap) {FileOutputStream fos;try {File root = Environment.getExternalStorageDirectory();File file = new File(root, "test.png");fos = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);fos.flush();fos.close();} catch (Exception e) {e.printStackTrace();}
}
复制代码
转载于:https://juejin.im/post/5c1bab72f265da6150646e96
android view 转Bitmap 生成截图相关推荐
- Android view转bitmap,byte[]转Bitmap
1.自定义marker布局文件即自定义view文件 <?xml version="1.0" encoding="utf-8"?> <Linea ...
- android分享截屏到微信,Android 微信分享长图 ScrollView 生成长截图 View变bitmap
这个不太难,绘制本页布局为图片 这样的功能 1.截屏 这个对于我这个CV战士来说,一见面我就觉得不可取了, ①.截屏 如果有三方库的话 最好了,没有 只能调 手机自带的,然而自带就意味着权限 ②.去除 ...
- Android 任意View转为bitmap图片
在开发的过程中有时会碰到这样的需求,把一个activity或者一个view变成图片分享出去.从网上收集了一些资料之后经过整理现在分享出来,教大家实现activity,scrollview,listvi ...
- Android中实现Bitmap在自定义View中的放大与拖动
一基本实现思路: 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对MotionEvent事件的监听与处理 ...
- [Android学习笔记二] View转化Bitmap
在View类中的onDraw方法的参数Canvas是View绘制的背景,要将View转换为Bitmap实际上就是让Canvas上的绘制操作绘制到Bitmap上. View转化为Bitmap也称为截屏, ...
- 【Android自定义View】Bitmap的绘制和颜色滤镜
前言 Bitmap在开发中是经常遇到的,因为他用到的地方有很多,比如Android的图片预览,自定义相机,自定义美颜相机,图片滤镜,图像算法....,既然使用场景这么多,今天就先讲一下Android中 ...
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
Android中View转换为Bitmap及getDrawingCache=null的解决方法 参考文章: (1)Android中View转换为Bitmap及getDrawingCache=null的 ...
- Android View 生成唯一 Id
Android View 生成唯一 Id 可以使用 Hook LayoutInflater 的方法替换 SystemService 原有的 LayoutInflater,在自定义的 LayoutInf ...
- android 原生 bitmap 生成pdf文件
写这篇文章,是因为我编写这块功能时,公司要求能用android原生代码就不要用第三方,所以,我找了好久都没找到谁在用原生代码生成pdf文件,尤其是把bitmap写入pdf中,所以,在这里,我把原生 生 ...
最新文章
- 解决putty中文乱码并远程访问linux界面功能
- 重新捡起flask(二)
- php中为什么要用heade定义头,有什么应用场景
- Vue2接口地址配置(webpack)
- 编写你的第一个 Django 应用,第 5 部分
- SPOJ - PHRASES Relevant Phrases of Annihilation(后缀数组+二分)
- 转:常用的几种加密算法以及java实现
- r语言 分类变量 虚拟变量_R语言中的变量
- FileStream功能被禁用
- webpack filemanager-webpack-plugin 打多个zip时,出现循环打包情况
- Unity编辑器扩展之EditorWindow
- MYSQL小函数大用途之-------FIND_IN_SET
- python excel插件_django使用插件下载excel的方法
- ASP.NET 2.0 – 善用DataSourceMode属性 (转自章立民CnBlogs)
- gui设置可编辑文本框的回调函数_用Tkinter制作Python程序的图形用户界面(GUI),打包后比Qt5减少60M(77.5%)(实例63)...
- undefined reference to `swr_init+
- 电路设计:为什么信号发生器设置的峰峰值,用示波器检测出是2倍?
- beescms网站渗透测试和修复意见
- 意外找回CSDN老账号,记录记录新账号备忘
- Linux服务器集群系统(一)——LVS项目介绍
热门文章
- 苹果手机网络稳定性测试软件,如何进行iOS稳定性测试
- mysql delete删除列,在MySQL中删除我的Key列 (Delete my Key column in MySQL)
- python本地读csv文件_python读写csv文件方法详细总结
- nat端口限制_Cisco ASA 防火墙 NAT - 基本概念
- linux npm安装_怎样在Linux上开发vue项目
- mysql 内存引擎_MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
- linux重新编译mysql_linux下编译安装mysql++ | 学步园
- 1.1.1.1校园网_还担心断网?快试试清华校园网自动连接程序
- 僵尸进程的产生与处理
- apidoc学习(接口文档定义取代word)