android view转Bitmap生成截图的方法
作者:程序猿tx 时间:2022-11-07 13:41:53
项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将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();
}
}
github地址:https://github.com/taixiang/view2bitmap
来源:https://segmentfault.com/a/1190000016241822
标签:android,view,Bitmap
0
投稿
猜你喜欢
java图片格式转换的三段代码
2023-01-22 05:43:02
Java求解二叉树的最近公共祖先实例代码
2023-09-14 18:24:56
C#中英文混合字符串截取函数
2023-01-19 06:02:55
C语言实现自定义扫雷游戏(递归版)
2023-11-03 02:12:36
Java Integer及int装箱拆箱对比
2023-04-22 04:21:11
Java synchronized关键_动力节点Java学院整理
2023-11-10 11:08:53
C#网站生成静态页面的实例讲解
2021-11-01 16:33:08
C# 输出字符串到文本文件中的实现代码
2022-08-25 11:18:13
一篇文章带你了解Java SpringMVC返回null
2023-11-24 15:18:03
Spring Boot下的Job定时任务
2021-10-23 05:16:14
java实现电话本系统
2021-06-05 20:39:39
maven springboot如何将jar包打包到指定目录
2022-12-09 00:40:25
java微信开发中的地图定位功能
2023-01-27 17:37:52
Java本地缓存的实现代码
2022-02-22 11:21:04
C#文件流读写和进度回调示例详解
2022-08-12 14:52:31
android开发仿ios的UIScrollView实例代码
2023-08-07 01:55:20
C#集合之集(set)的用法
2023-05-18 06:04:53
java中Date类和Strng类的灵活转化
2022-12-09 07:47:24
JAVA常用API总结与说明
2023-05-19 08:17:17
详解C#中的string与String
2023-07-30 01:58:01