• 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));    

        }    

  • 相关阅读:
    vscode写python时的代码错误提醒和自动格式化
    Python使用requests发送post请求的三种方式
    unittest参数化(paramunittest)
    pycharm快捷键及一些常用设置
    Navicat破解
    Python3 os.path() 模块笔记
    Python使用SMTP模块、email模块发送邮件
    五笔字典86版wubi拆字图编码查询
    根据字符串从资源中取出对应的资源ResourceManager.GetObject
    判断字符串是否是由相同的字符组成
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4026016.html
Copyright © 2020-2023  润新知