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

发布时间 - 2026-01-11 02:34:20    点击率:

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出现空指针问题解决办法,如有疑问请留言或者到本站社区交流讨论,谢谢大家对本站的支持!


# Android  # 将view  # 转换为Bitmap出现空指针  # Bitmap空指针  # 一文理解Android系统中强指针的实现  # android中实现指针滑动的动态效果方法  # 理解关于Android系统中轻量级指针的实现  # 转换为  # 要注意  # 解决方法  # 解决办法  # 的人  # 有一  # 如有  # 这个问题  # 希望能  # 才发现  # 能有  # 但这  # 谢谢大家  # 转换成  # 需要注意  # 疑问请  # 中才  # 文件转换成  # 有两个  # 修正了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何在云主机上快速搭建网站?  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  微信小程序 canvas开发实例及注意事项  Laravel安装步骤详细教程_Laravel环境搭建指南  JS中对数组元素进行增删改移的方法总结  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  lovemo网页版地址 lovemo官网手机登录  如何在阿里云完成域名注册与建站?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何在阿里云ECS服务器部署织梦CMS网站?  如何在自有机房高效搭建专业网站?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  北京网站制作的公司有哪些,北京白云观官方网站?  如何快速登录WAP自助建站平台?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  如何在宝塔面板创建新站点?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel怎么判断请求类型_Laravel Request isMethod用法  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel怎么为数据库表字段添加索引以优化查询  IOS倒计时设置UIButton标题title的抖动问题  如何在万网利用已有域名快速建站?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  高性能网站服务器配置指南:安全稳定与高效建站核心方案  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  活动邀请函制作网站有哪些,活动邀请函文案?  如何在服务器上配置二级域名建站?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  企业网站制作这些问题要关注  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  制作公司内部网站有哪些,内网如何建网站?  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  如何在宝塔面板中创建新站点?  如何在IIS管理器中快速创建并配置网站?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何在阿里云香港服务器快速搭建网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?