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
  • asp之家 软件编程 m.aspxhome.com