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();
  }
}

github地址:https://github.com/taixiang/view2bitmap

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android App开发中将View或Drawable转为Bitmap的方法

    View转换为Bitmap Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片:Coverflow中需要把一页一页的view转换为Bitmap.以便实现复杂的图形效果(阴影.倒影效果等):再比如一些动态的实时View为便于观察和记录数据.需要临时生成静态的Bitmap. 实现方法: 1)下面是笔者经常用的一个转换方法 public static Bitmap convertViewToBitmap(View view, int bitmapWid

  • Android 将view 转换为Bitmap出现空指针问题解决办法

    Android 将view 转换为Bitmap出现空指针问题解决办法 在做Android 项目的时候,有时候可能有这样的需求,将一个View 或者一个布局文件转换成一个Bitmap  对象. 方法其实大都差不多.但这其中有一些小细节需要注意一下.最近在项目中用到了这个功能,现在分享一下,希望能帮助到遇到果这个 问题的人. 首先是转换 的代码: /** * 将View(布局) 转换为bitmap * @param view * @return */ public static Bitmap cre

  • Android自定义view实现圆形、圆角和椭圆图片(BitmapShader图形渲染)

    一.前言 Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的.实现圆角图片的方法其实不少,常见的就是利用Xfermode,Shader.本文直接继承ImageView,使用BitmapShader方法来实现圆形.圆角和椭圆的绘制,等大家看我本文的方法后,其他的类似形状也就都能举一反三来来画出来了. 二.效果图: 三.BitmapShader简介 BitmapShader是Shader的子类,可以通过Paint.setShader(Shader

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

    1.前言 Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片:Coverflow中需要把一页一页的view转换为Bitmap.以便实现复杂的图形效果(阴影.倒影效果等):再比如一些动态的实时View为便于观察和记录数据.需要临时生成静态的Bitmap. 2.实现方法 1)下面是笔者经常用的一个转换方法 public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int

  • Android实现将View保存成Bitmap的方法

    本文实例讲述了Android实现将View保存成Bitmap的方法.分享给大家供大家参考,具体如下: 1. public Bitmap convertViewToBitmap(View view){ Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); //利用bitmap生成画布 Canvas canvas = new Canvas(bitmap); //

  • android view转Bitmap生成截图的方法

    项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将view 转成bitmap 再到图片分享,还有一种情况是将不可见的view 转成bitmap ,这种view是没有直接显示在界面上的,需要我们使用inflate 进行创建的view. 第一种 先看通过 DrawingCache 方法来截取普通的view,获取它的视图(Bitmap). private Bitmap createBitmap(View view) { view.buil

  • Android View转换为Bitmap实现应用内截屏功能

    目录 前言 一.getDrawingCache 二.黑屏问题 三.源码分析 四.View转Canvas转Bitmap 前言 安卓设备一般都自带截图功能,但是用户体验有不好之处.就是会连带着状态栏..时间日期.其他不必要页面中信息,等等与用户想截屏的内容不符的信息也会被保存下来.通常,截图后用户会再次裁剪一次才能想把真正需求分享出去. 因此,咱们技术研发会遇到针对性的会做一些应用内的截屏功能. 一.getDrawingCache getDrawingCache()是其中一种截图手段,使用方便,主要

  • Android编程实现随机生成颜色的方法示例

    本文实例讲述了Android编程实现随机生成颜色的方法.分享给大家供大家参考,具体如下: 网上有个ColorPicker开源项目,选择颜色值.而在这里我想实现的是动态修改一个view的背景色. 开一个线程,每隔1s修改一次view的背景色. 我们知道在Android里设置一个view的背景色有 framelayout.setBackgroundColor(Color.parseColor("#"+arg0.obj)); 就是用android的Color类去解析一个带#号的十六进制色值.

  • Android中把bitmap存成BMP格式图片的方法

    最近的项目,做图片的另存为功能,需要把图片存成jpg,png,bmp.对于jpg和png来说相对简单,android提供了bitmap.compress()方法可以马上解决.但是对于BMP这种格式,没有很好的支持.我花了几天时间在网上找了很久,都没有找到有用的答案,同样也发了疑问,没有合适的解答. package com.test.bitmap; import java.io.FileNotFoundException; import java.io.FileOutputStream; impo

  • 浅谈Android截屏和指定View生成截图

    当前页面截图(截取整个屏幕) 截取当前Activity页面的截图,可以通过窗体最底层的decorView进行缓存,然后根据这个缓存对象生成一张图片.有的需要不需要状态栏,也可以指定生成图片的宽高,把状态栏去除. /** * 截取当前窗体的截图,根据[isShowStatusBar]判断是否包含当前窗体的状态栏 * 原理是获取当前窗体decorView的缓存生成图片 */ fun captureWindow(activity: Activity, isShowStatusBar: Boolean)

  • Android实现二维码扫描和生成的简单方法

    这里简单介绍一下ZXing库.ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.该项目可实现的条形码编码和解码.目前支持以下格式:UPC-A,UPC-E.EAN-8,EAN-13.39码.93码.ZXing是个很经典的条码/二维码识别的开源类库,以前在功能机上,就有开发者使用J2ME运用ZXing了,不过要支持JSR-234规范(自动对焦)的手机才能发挥其威力. ZXing

  • android中圆角图像生成方法

    本文实例讲述了android中圆角图像生成方法.分享给大家供大家参考.具体分析如下: 在android开发中为了美观,常常要求ImageView中显示出圆角图像的效果,这个如何实现? 这里总结了网上的最优方法:将图像处理成圆角,然后在加载给ImageView显示,代码如下: public Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.get

  • Android开发实现生成excel的方法详解

    本文实例讲述了Android开发实现生成excel的方法.分享给大家供大家参考,具体如下: 都说程序员不爽产品经理,其实有的时候遇到一些奇葩的后台开发人员也会很不顺心.最近项目有这样一个要求,要生成一个excel然后发邮件给客户.结果后台人员直接把这个功能扔给客户端,理由是后台不好实现.听到这也就只能自己实现了(分分钟就想来个螺旋王扣它头上).这篇博客讲下如下在android中生成excel表并存到本地.先看下生成后的效果图: 初始化数据 首先我们要先造下测试数据,这里我把数据写死在一个常量类C

随机推荐