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(); Bitmapbitmap=contentLayout.getDrawingCache(); 在使用的时候调用 Bitmap bitmap = view.getDrawingCache(); 就可以得到图片的bitmap了。 为了测试这个功能,作者使用了两种方式来创建LinerLayout中的内容,一种是在xml文件中就将view的内容添加了,只需在代码中添加对应ImageView中的图片就行了;另一种是动态添加LinerLayout中的View。 setview的代码: publicvoidonCreate(BundlesavedInstanceState){ 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(); Bitmapbitmap=contentLayout.getDrawingCache(); if(bitmap!=null){ imgCache.setImageBitmap(bitmap); }else{ Log.i("CACHE_BITMAP","DrawingCache=null"); } } 第二种方法代码: privatevoidaddRelativeLayout(){ //TODOAuto-generatedmethodstub RelativeLayout.LayoutParamslayoutpare=newRelativeLayout.LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); RelativeLayoutrelativeLayout=newRelativeLayout(this); relativeLayout.setLayoutParams(layoutpare); ImageViewimgView1=newImageView(this); ImageViewimgView2=newImageView(this); imgView1.setImageResource(R.drawable.source1); imgView2.setImageResource(R.drawable.source2); RelativeLayout.LayoutParamsimg1=newRelativeLayout.LayoutParams(38, 38); img1.addRule(RelativeLayout.ALIGN_PARENT_LEFT,RelativeLayout.TRUE); RelativeLayout.LayoutParamsimg2=newRelativeLayout.LayoutParams(38, 38); img2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,RelativeLayout.TRUE); relativeLayout.addView(imgView1,img1); relativeLayout.addView(imgView2,img2); addViewContent.addView(relativeLayout); } /** *添加图片源 */ privatevoidaddImgSource(){ ImageViewimgView1=newImageView(this); ImageViewimgView2=newImageView(this); imgView1.setImageResource(R.drawable.source1); imgView2.setImageResource(R.drawable.source2); addViewContent.addView(imgView1,newLayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); addViewContent.addView(imgView2,newLayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); } 本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/629808,如需转载请自行联系原作者