Android:将View的内容映射成Bitmap转图片导出
16lz
2021-01-26
前段时间在网上看到这么个例子是将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));
- }
文章参考自:http://www.iteye.com/topic/1097916
更多相关文章
- android中关于使用scrollview嵌套LinearLayout,页面滚动条不到底
- Android中程序向桌面和Launcher添加快捷方式【安卓进化三十二】
- js如何判断用户是在PC端和还是移动端访问
- Android实现与SQL连接
- 谷歌J2ObjC:打破Android应用与iOS应用之间的语言障碍
- android碎片Fragment简介详解
- 《深入探索Android热修复原理》代码热修复总结
- Android适配器进阶之一(单类型抽象适配器)
- android通讯录开发