Android 将view 转换为Bitmap出现空指针问题解决办法

Android 将view 转换为Bitmap出现空指针问题解决办法

在做Android 项目的时候,有时候可能有这样的需求,将一个View 或者一个布局文件转换成一个Bitmap  对象。

方法其实大都差不多。但这其中有一些小细节需要注意一下。最近在项目中用到了这个功能,现在分享一下,希望能帮助到遇到果这个

问题的人。

首先是转换 的代码:

/** * 将View(布局) 转换为bitmap * @param view * @return */ public static Bitmap createBitmap(View view){ view.setDrawingCacheEnabled(true); /** * 这里要注意,在用View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) * 来测量view 的时候,(如果你的布局中包含有 RelativeLayout )API 为17 或者 低于17 会包空指针异常 * 解决方法: * 1 布局中不要包含RelativeLayout * 2 用 View.MeasureSpec.makeMeasureSpec(256, View.MeasureSpec.EXACTLY) 好像也可以 * */ view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; }

上面就是转换成Bitmap 的方法,但是要注意,在用View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)

来测量view 的时候,(如果你的布局中包含有 RelativeLayout )API 为17 或者 低于17 会包空指针异常。在项目中遇到这个问题

死活不知道是怎么回事,后来在看源码的时候才发现。以下是这个方法的官方解释:

/** * Creates a measure specification based on the supplied size and mode. * * The mode must always be one of the following: * <ul> * <li>{@link android.view.View.MeasureSpec#UNSPECIFIED}</li> * <li>{@link android.view.View.MeasureSpec#EXACTLY}</li> * <li>{@link android.view.View.MeasureSpec#AT_MOST}</li> * </ul> * * <p><strong>Note:</strong> On API level 17 and lower, makeMeasureSpec's * implementation was such that the order of arguments did not matter * and overflow in either value could impact the resulting MeasureSpec. * {@link android.widget.RelativeLayout} was affected by this bug. * Apps targeting API levels greater than 17 will get the fixed, more strict * behavior.</p> * * @param size the size of the measure specification * @param mode the mode of the measure specification * @return the measure specification based on size and mode */ public static int makeMeasureSpec(int size, int mode) { if (sUseBrokenMakeMeasureSpec) { return size + mode; } else { return (size & ~MODE_MASK) | (mode & MODE_MASK); } }

在API 17 以上的系统中才修正了这个bug,这里有两个解决方法:

1 ,布局文件中不要包含Relativelayout 布局

2,用 View.MeasureSpec.makeMeasureSpec(256, View.MeasureSpec.EXACTLY) 好像也可以

以上就是Android 将view 转换为Bitmap出现空指针问题解决办法,如有疑问请留言或者到本站社区交流讨论,谢谢大家对本站的支持!

时间: 2024-07-29 15:44:51

Android 将view 转换为Bitmap出现空指针问题解决办法的相关文章

解析Android中View转换为Bitmap及getDrawingCache=null的解决方法_Android

1.前言 Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片:Coverflow中需要把一页一页的view转换为Bitmap.以便实现复杂的图形效果(阴影.倒影效果等):再比如一些动态的实时View为便于观察和记录数据.需要临时生成静态的Bitmap. 2.实现方法 1)下面是笔者经常用的一个转换方法 public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int

解析Android中View转换为Bitmap及getDrawingCache=null的解决方法

1.前言 Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片:Coverflow中需要把一页一页的view转换为Bitmap.以便实现复杂的图形效果(阴影.倒影效果等):再比如一些动态的实时View为便于观察和记录数据.需要临时生成静态的Bitmap. 2.实现方法 1)下面是笔者经常用的一个转换方法 public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int

Android ListView与getView调用卡顿问题解决办法

Android ListView与getView调用卡顿问题解决办法 解决办法1,设置ListView高度为固定值或者match_parent/ifll_parent @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Log.d("onMeasure", "onMeasure"); isOnMeasure = true; super.onMeasure(

Android 使用volley过程中遇到的问题解决办法

Android 使用volley过程中遇到的问题解决办法 本文主要介绍使用 volley 过程中遇到的问题,错误提示: com.android.volley.NoConnectionError: java.io.InterruptedIOException",内容加载失败,问题出在重复调用 queue.start() 方法. 错误提示:com.android.volley.NoConnectionError: java.io.InterruptedIOException",然后就内容加

Android Studio控制台出现中文乱码(方框)问题解决办法

Android Studio控制台出现中文乱码(方框)问题解决办法 最近遇到个恶心的事儿,就使用死丢丢的时候,发现怎么我的控制台输出中文都显示方框???别人都没事,恶心坏我了.经过各种百度,终于找到解决办法,办法也是够恶心的.我们一起来看看吧. 乱码显示结果如下: 解决办法很简单,设置字体为YaHei即可.(可能之前下载的苹果编程字体不支持吧) 修改后结果可以正常显示了 再次简单做个记录, 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android studio 下的APK打包失败问题解决办法

Android studio 下的APK打包失败问题解决办法 今天遇到了一个奇怪的问题,本来在Android studio 1.4上运行的好好的程序,到了我更新完的Android studio 2.1上就打包失败了,但是用调试机直接运行则没问题. 最后在app下的build.gradle下加入了这样的一段代码就通过了: lintOptions { abortOnError false checkReleaseBuilds false // 防止在发布的时候出现因MissingTranslatio

Android 中TextView的使用imageview被压缩问题解决办法

Android 中TextView的使用imageview被压缩问题解决办法 看下运行效果图: 今天解bug的时候遇到一个奇怪的问题:listview的item由一个textview和一个imageview组成,父布局是线性水平排列.我的本意是imageview显示相同的图片,textview显示文本,但是运行程序后发现,当某个textview的文本较多时,imageview会被压缩,刚开始没注意,检查代码了好久. 代码示例如下: <!--文本少的item--> <LinearLayou

Android中Handler引起的内存泄露问题解决办法_java

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. 复制代码 代码如下: public class SampleActivity extends Activity {   private final Handler mLeakyHandler = new Handler() {     @Override     public void handleMessage(Message msg) {       // ...     }  

Android apk无法安装及闪退问题解决办法

Android apk无法安装及闪退问题 app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,apk 在手机上发布不了,要么就是,安装了 打不开,打开就闪退:问题有一下两方面 1.之前做过一个环信的即时通讯,集成好环信的sdk之后在4.x的手机上就打开就闪退,,只能在5.x和6.x手机上打开app 2.最近又碰到了同样的问题不过这次和上次不一样,这次是因为我的 as升级到了 2.3 之后出现的这