zoukankan      html  css  js  c++  java
  • 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));    

        }    

  • 相关阅读:
    perl自定义简易的面向对象的栈与队列类
    java idea实现.java文件编译成class并运行
    git代码管理及提交
    k8s和docker的区别
    pycharm查看代码结构的方法
    ssh 登录的方式
    excel分析数据绘制统计直方图
    linux普通用户使用yum安装nginx,并使用nginx
    iterm2 + virtualbox + centos环境搭建
    python源码安装
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4026016.html
Copyright © 2011-2022 走看看