项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将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 生成截图相关推荐

  1. Android view转bitmap,byte[]转Bitmap

    1.自定义marker布局文件即自定义view文件 <?xml version="1.0" encoding="utf-8"?> <Linea ...

  2. android分享截屏到微信,Android 微信分享长图 ScrollView 生成长截图 View变bitmap

    这个不太难,绘制本页布局为图片 这样的功能 1.截屏 这个对于我这个CV战士来说,一见面我就觉得不可取了, ①.截屏 如果有三方库的话 最好了,没有 只能调 手机自带的,然而自带就意味着权限 ②.去除 ...

  3. Android 任意View转为bitmap图片

    在开发的过程中有时会碰到这样的需求,把一个activity或者一个view变成图片分享出去.从网上收集了一些资料之后经过整理现在分享出来,教大家实现activity,scrollview,listvi ...

  4. Android中实现Bitmap在自定义View中的放大与拖动

    一基本实现思路: 基于View类实现自定义View –MyImageView类.在使用View的Activity类中完成OnTouchListener接口,实现对MotionEvent事件的监听与处理 ...

  5. [Android学习笔记二] View转化Bitmap

    在View类中的onDraw方法的参数Canvas是View绘制的背景,要将View转换为Bitmap实际上就是让Canvas上的绘制操作绘制到Bitmap上. View转化为Bitmap也称为截屏, ...

  6. 【Android自定义View】Bitmap的绘制和颜色滤镜

    前言 Bitmap在开发中是经常遇到的,因为他用到的地方有很多,比如Android的图片预览,自定义相机,自定义美颜相机,图片滤镜,图像算法....,既然使用场景这么多,今天就先讲一下Android中 ...

  7. Android中View转换为Bitmap及getDrawingCache=null的解决方法

    Android中View转换为Bitmap及getDrawingCache=null的解决方法 参考文章: (1)Android中View转换为Bitmap及getDrawingCache=null的 ...

  8. Android View 生成唯一 Id

    Android View 生成唯一 Id 可以使用 Hook LayoutInflater 的方法替换 SystemService 原有的 LayoutInflater,在自定义的 LayoutInf ...

  9. android 原生 bitmap 生成pdf文件

    写这篇文章,是因为我编写这块功能时,公司要求能用android原生代码就不要用第三方,所以,我找了好久都没找到谁在用原生代码生成pdf文件,尤其是把bitmap写入pdf中,所以,在这里,我把原生 生 ...

最新文章

  1. 解决putty中文乱码并远程访问linux界面功能
  2. 重新捡起flask(二)
  3. php中为什么要用heade定义头,有什么应用场景
  4. Vue2接口地址配置(webpack)
  5. 编写你的第一个 Django 应用,第 5 部分
  6. SPOJ - PHRASES Relevant Phrases of Annihilation(后缀数组+二分)
  7. 转:常用的几种加密算法以及java实现
  8. r语言 分类变量 虚拟变量_R语言中的变量
  9. FileStream功能被禁用
  10. webpack filemanager-webpack-plugin 打多个zip时,出现循环打包情况
  11. Unity编辑器扩展之EditorWindow
  12. MYSQL小函数大用途之-------FIND_IN_SET
  13. python excel插件_django使用插件下载excel的方法
  14. ASP.NET 2.0 – 善用DataSourceMode属性 (转自章立民CnBlogs)
  15. gui设置可编辑文本框的回调函数_用Tkinter制作Python程序的图形用户界面(GUI),打包后比Qt5减少60M(77.5%)(实例63)...
  16. undefined reference to `swr_init+
  17. 电路设计:为什么信号发生器设置的峰峰值,用示波器检测出是2倍?
  18. beescms网站渗透测试和修复意见
  19. 意外找回CSDN老账号,记录记录新账号备忘
  20. Linux服务器集群系统(一)——LVS项目介绍

热门文章

  1. 苹果手机网络稳定性测试软件,如何进行iOS稳定性测试
  2. mysql delete删除列,在MySQL中删除我的Key列 (Delete my Key column in MySQL)
  3. python本地读csv文件_python读写csv文件方法详细总结
  4. nat端口限制_Cisco ASA 防火墙 NAT - 基本概念
  5. linux npm安装_怎样在Linux上开发vue项目
  6. mysql 内存引擎_MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
  7. linux重新编译mysql_linux下编译安装mysql++ | 学步园
  8. 1.1.1.1校园网_还担心断网?快试试清华校园网自动连接程序
  9. 僵尸进程的产生与处理
  10. apidoc学习(接口文档定义取代word)