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

简介:

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

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


 
 
  1. contentLayout.setDrawingCacheEnabled(true);     
  2.         contentLayout.measure(     
  3.                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),     
  4.                 MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));     
  5.        contentLayout.layout(00, contentLayout.getMeasuredWidth(),     
  6.                 contentLayout.getMeasuredHeight());     
  7.    
  8.      contentLayout.buildDrawingCache();     
  9.            
  10.       Bitmap bitmap= contentLayout.getDrawingCache();    

在使用的时候调用

Bitmap bitmap = view.getDrawingCache();

就可以得到图片的bitmap了。

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

 

setview的代码:


 
 
  1. public void onCreate(Bundle savedInstanceState) {     
  2.     super.onCreate(savedInstanceState);     
  3.     setContentView(R.layout.set_view);     
  4.     contentLayout = (LinearLayout) findViewById(R.id.content);     
  5.     imgSource1 = (ImageView) findViewById(R.id.imgSource1);     
  6.     imgSource2 = (ImageView) findViewById(R.id.imgSource2);     
  7.     imgCache = (ImageView) findViewById(R.id.imgCache);     
  8.     
  9.    imgSource1.setImageResource(R.drawable.source1);     
  10.     imgSource2.setImageResource(R.drawable.source2);     
  11.         
  12.     contentLayout.setDrawingCacheEnabled(true);     
  13.     contentLayout.measure(     
  14.             MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),     
  15.             MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));     
  16.     contentLayout.layout(00, contentLayout.getMeasuredWidth(),     
  17.             contentLayout.getMeasuredHeight());     
  18.     
  19.     contentLayout.buildDrawingCache();     
  20.          
  21.     Bitmap bitmap= contentLayout.getDrawingCache();     
  22.     if(bitmap!=null){     
  23.         imgCache.setImageBitmap(bitmap);     
  24.     }else{     
  25.         Log.i("CACHE_BITMAP""DrawingCache=null");     
  26.     }     
  27. }    

第二种方法代码:

 


 
 
  1. private void addRelativeLayout() {     
  2.         // TODO Auto-generated method stub     
  3.         RelativeLayout.LayoutParams layoutpare = new RelativeLayout.LayoutParams(     
  4.                 LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);     
  5.    
  6.         RelativeLayout relativeLayout = new RelativeLayout(this);     
  7.         relativeLayout.setLayoutParams(layoutpare);     
  8.     
  9.         ImageView imgView1 = new ImageView(this);     
  10.         ImageView imgView2 = new ImageView(this);     
  11.         imgView1.setImageResource(R.drawable.source1);     
  12.         imgView2.setImageResource(R.drawable.source2);     
  13.         RelativeLayout.LayoutParams img1 = new RelativeLayout.LayoutParams(38,     
  14.                 38);     
  15.         img1.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);     
  16.         RelativeLayout.LayoutParams img2 = new RelativeLayout.LayoutParams(38,     
  17.                 38);     
  18.         img2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);     
  19.     
  20.         relativeLayout.addView(imgView1, img1);     
  21.         relativeLayout.addView(imgView2, img2);     
  22.         addViewContent.addView(relativeLayout);     
  23.     }     
  24.     
  25.     /**    
  26.      * 添加图片源    
  27.      */    
  28.    private void addImgSource() {     
  29.         ImageView imgView1 = new ImageView(this);     
  30.         ImageView imgView2 = new ImageView(this);     
  31.         imgView1.setImageResource(R.drawable.source1);     
  32.         imgView2.setImageResource(R.drawable.source2);     
  33.         addViewContent.addView(imgView1, new LayoutParams(     
  34.                 LinearLayout.LayoutParams.WRAP_CONTENT,     
  35.                 LinearLayout.LayoutParams.WRAP_CONTENT));     
  36.         addViewContent.addView(imgView2, new LayoutParams(     
  37.                 LinearLayout.LayoutParams.WRAP_CONTENT,     
  38.                 LinearLayout.LayoutParams.WRAP_CONTENT));     
  39.     }    

 本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/629808,如需转载请自行联系原作者

相关文章
|
3月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
109 0
|
2月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
45 2
|
2月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
44 5
|
3月前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
3月前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
44 2
|
3月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
4月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
78 20
Android经典面试题之图片Bitmap怎么做优化
|
3月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
29 2
|
3月前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
56 3
|
3月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。