Android:将View的内容映射成Bitmap转图片导出

转载 2014年07月28日 10:20:58

    前段时间在网上看到这么个例子是将view映射到一个bitmap中,稍加改进可以用于一些截图工具或者截图软件(QQ截图之类),例子写的不够完善,不过很有些学习的意义内容大致如下:

    在Android中自有获取view中的cache内容,然后将内容转换成bitmap,方法名是:getDrawingCache(),返回结果为Bitmap,但是刚开始使用的时候,得到的结果都是null,所以在一个论坛里查到了正确的使用方法.代码如下:


  1. contentLayout.setDrawingCacheEnabled(true);     
  2.        contentLayout.measure(     
  3.                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),     
  4.                 MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));     
  5.        contentLayout.layout(00, contentLayout.getMeasuredWidth(),     
  6.                 contentLayout.getMeasuredHeight());     
  7.    
  8.       contentLayout.buildDrawingCache();     
  9.        //会报Canvas: trying to use a recycled bitmap android.graphics.Bitmap
  10.        //Bitmap bitmap= contentLayout.getDrawingCache();
  11. //解决办法:

    //Copy the bitmap before you pass it to the static variable.

            Bitmap bitmap = contentLayout.getDrawingCache(true);

    //to

            Bitmap bitmap = Bitmap.createBitmap(contentLayout.getDrawingCache(true));


在使用的时候调用

Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());

就可以得到图片的bitmap了。

为了测试这个功能,作者使用了两种方式来创建LinerLayout中的内容,一种是在xml文件中就将view的内容添加了,只需在代码中添加对应ImageView中的图片就行了;另一种是动态添加LinerLayout中的View。

 

setview的代码:

  1. public void onCreate(Bundle savedInstanceState) {     
  2.     super.onCreate(savedInstanceState);     
  3.     setContentView(R.layout.set_view);     
  4.     contentLayout = (LinearLayout) findViewById(R.id.content);     
  5.     imgSource1 = (ImageView) findViewById(R.id.imgSource1);     
  6.     imgSource2 = (ImageView) findViewById(R.id.imgSource2);     
  7.     imgCache = (ImageView) findViewById(R.id.imgCache);     
  8.     
  9.    imgSource1.setImageResource(R.drawable.source1);     
  10.     imgSource2.setImageResource(R.drawable.source2);     
  11.         
  12.     contentLayout.setDrawingCacheEnabled(true);     
  13.     contentLayout.measure(     
  14.             MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),     
  15.             MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));     
  16.     contentLayout.layout(00, contentLayout.getMeasuredWidth(),     
  17.             contentLayout.getMeasuredHeight());     
  18.     
  19.     contentLayout.buildDrawingCache();     
  20.          
  21.     Bitmap bitmap= contentLayout.getDrawingCache();     
  22.     if(bitmap!=null){     
  23.         imgCache.setImageBitmap(bitmap);     
  24.     }else{     
  25.         Log.i("CACHE_BITMAP""DrawingCache=null");     
  26.     }     
  27. }    

第二种方法代码:

 

  1. private void addRelativeLayout() {     
  2.         // TODO Auto-generated method stub     
  3.         RelativeLayout.LayoutParams layoutpare = new RelativeLayout.LayoutParams(     
  4.                 LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);     
  5.    
  6.         RelativeLayout relativeLayout = new RelativeLayout(this);     
  7.         relativeLayout.setLayoutParams(layoutpare);     
  8.     
  9.         ImageView imgView1 = new ImageView(this);     
  10.         ImageView imgView2 = new ImageView(this);     
  11.         imgView1.setImageResource(R.drawable.source1);     
  12.         imgView2.setImageResource(R.drawable.source2);     
  13.         RelativeLayout.LayoutParams img1 = new RelativeLayout.LayoutParams(38,     
  14.                 38);     
  15.         img1.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);     
  16.         RelativeLayout.LayoutParams img2 = new RelativeLayout.LayoutParams(38,     
  17.                 38);     
  18.         img2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);     
  19.     
  20.         relativeLayout.addView(imgView1, img1);     
  21.         relativeLayout.addView(imgView2, img2);     
  22.         addViewContent.addView(relativeLayout);     
  23.     }     
  24.     
  25.     /**    
  26.      * 添加图片源    
  27.      */    
  28.    private void addImgSource() {     
  29.         ImageView imgView1 = new ImageView(this);     
  30.         ImageView imgView2 = new ImageView(this);     
  31.         imgView1.setImageResource(R.drawable.source1);     
  32.         imgView2.setImageResource(R.drawable.source2);     
  33.         addViewContent.addView(imgView1, new LayoutParams(     
  34.                 LinearLayout.LayoutParams.WRAP_CONTENT,     
  35.                 LinearLayout.LayoutParams.WRAP_CONTENT));     
  36.         addViewContent.addView(imgView2, new LayoutParams(     
  37.                 LinearLayout.LayoutParams.WRAP_CONTENT,     
  38.                 LinearLayout.LayoutParams.WRAP_CONTENT));     
  39.     }    

 

 

文章参考自:http://www.iteye.com/topic/1097916

如何将layout 的内容转成bitmap

Android 如何将view转成bitmap
  • UFOgxx
  • UFOgxx
  • 2017年04月07日 14:18
  • 229

android将LinearLayout中的内容保存为Bitmap。

前几天,和别人探讨问题的时候,突然了解到还有这个功能。 现在闲了,纪录下来,方便大家调用。 public Bitmap createViewBitmap(View v) { Bitmap bi...
  • u011368551
  • u011368551
  • 2015年08月04日 09:40
  • 1917

将View的内容映射成Bitmap转图片导出

将view映射到一个bitmap中,稍加改进可以用于一些截图工具或者截图软件(QQ截图之类),例子写的不够完善,不过很有些学习的意义内容大致如下: 在Android中自有获取view中的cac...
  • jianpengxuexikaifa
  • jianpengxuexikaifa
  • 2014年03月12日 14:35
  • 7816

Android 如何将Canvas上绘制的内容保存成本地图片

1》》增加
  • cxc19890214
  • cxc19890214
  • 2014年10月09日 09:16
  • 4460

关于View转化成bitmap保存成图片

产品今天说项目分享时要分享出一张  封面图片 + 几行文字 + 二维码图片 的图片。 思索了一下 封面图片和二维码图片让后台给接口得到地址, 主要还是找个方式得到一个包含这些内容的图片。于是就想能不...
  • a450479378
  • a450479378
  • 2016年11月08日 14:24
  • 3879

Android:将View的内容映射成Bitmap转图片导出

前段时间在网上看到这么个例子是将view映射到一个bitmap中,稍加改进可以用于一些截图工具或者截图软件(QQ截图之类),例子写的不够完善,不过很有些学习的意义内容大致如下: 在Android...
  • derek_heaven
  • derek_heaven
  • 2012年11月13日 16:22
  • 333

将View的内容映射成Bitmap转图片导出

将view映射到一个bitmap中,稍加改进可以用于一些截图工具或者截图软件(QQ截图之类),例子写的不够完善,不过很有些学习的意义内容大致如下: 在Android中自有获取view中的cac...
  • jianpengxuexikaifa
  • jianpengxuexikaifa
  • 2014年03月12日 14:35
  • 7816

Android:将View的内容映射成Bitmap

最近在做一个类似于游标的东西,由一个类似于seekbar的view来控制下端view内容的显示位置。所以需要将view中的内容映射成一张图片,设为seekbar的背景。所以就做了一些尝试,不过还有一些...
  • fancylovejava
  • fancylovejava
  • 2014年03月18日 09:29
  • 865

android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte

package com.bingo.util; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; ...
  • z104207
  • z104207
  • 2011年07月26日 14:33
  • 20313

Android View对象转化成Bitmap图像

  • 2014年09月23日 19:44
  • 2.48MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android:将View的内容映射成Bitmap转图片导出
举报原因:
原因补充:

(最多只允许输入30个字)