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

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

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

contentLayout.setDrawingCacheEnabled(true);    

        contentLayout.measure(    

               MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),    

                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));    

       contentLayout.layout(0, 0, contentLayout.getMeasuredWidth(),    

                contentLayout.getMeasuredHeight());    

  

     contentLayout.buildDrawingCache();    

          

      Bitmap bitmap= contentLayout.getDrawingCache();   

 

在使用的时候调用

Bitmap bitmap = view.getDrawingCache();

就可以得到图片的bitmap了。

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


setview的代码:

public void onCreate(Bundle savedInstanceState) {    

    super.onCreate(savedInstanceState);    

    setContentView(R.layout.set_view);    

    contentLayout = (LinearLayout) findViewById(R.id.content);    

    imgSource1 = (ImageView) findViewById(R.id.imgSource1);    

    imgSource2 = (ImageView) findViewById(R.id.imgSource2);    

    imgCache = (ImageView) findViewById(R.id.imgCache);    

   

   imgSource1.setImageResource(R.drawable.source1);    

    imgSource2.setImageResource(R.drawable.source2);    

       

    contentLayout.setDrawingCacheEnabled(true);    

    contentLayout.measure(    

            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),    

            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));    

    contentLayout.layout(0, 0, contentLayout.getMeasuredWidth(),    

            contentLayout.getMeasuredHeight());    

   

    contentLayout.buildDrawingCache();    

        

    Bitmap bitmap= contentLayout.getDrawingCache();    

    if(bitmap!=null){    

        imgCache.setImageBitmap(bitmap);    

    }else{    

        Log.i("CACHE_BITMAP", "DrawingCache=null");    

    }    

}   

第二种方法代码:

 

private void addRelativeLayout() {    

        // TODO Auto-generated method stub    

        RelativeLayout.LayoutParams layoutpare = new RelativeLayout.LayoutParams(    

                LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);    

  

        RelativeLayout relativeLayout = new RelativeLayout(this);    

        relativeLayout.setLayoutParams(layoutpare);    

   

        ImageView imgView1 = new ImageView(this);    

        ImageView imgView2 = new ImageView(this);    

        imgView1.setImageResource(R.drawable.source1);    

        imgView2.setImageResource(R.drawable.source2);    

        RelativeLayout.LayoutParams img1 = new RelativeLayout.LayoutParams(38,    

                38);    

        img1.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);    

        RelativeLayout.LayoutParams img2 = new RelativeLayout.LayoutParams(38,    

                38);    

        img2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);    

   

        relativeLayout.addView(imgView1, img1);    

        relativeLayout.addView(imgView2, img2);    

        addViewContent.addView(relativeLayout);    

    }    

   

    /**   

     * 添加图片源   

     */   

   private void addImgSource() {    

        ImageView imgView1 = new ImageView(this);    

        ImageView imgView2 = new ImageView(this);    

        imgView1.setImageResource(R.drawable.source1);    

        imgView2.setImageResource(R.drawable.source2);    

        addViewContent.addView(imgView1, new LayoutParams(    

                LinearLayout.LayoutParams.WRAP_CONTENT,    

                LinearLayout.LayoutParams.WRAP_CONTENT));    

        addViewContent.addView(imgView2, new LayoutParams(    

                LinearLayout.LayoutParams.WRAP_CONTENT,    

                LinearLayout.LayoutParams.WRAP_CONTENT));    

    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值