view.getDrawingCache() 为 null

Webview not displayed because it is too large to fit into a software layer (or drawing cache) 现象:在适配折叠屏的时候,从折叠到展开时 WebView如下提示而显示白屏。原来是对应的Activity开启了硬件加速导致,关闭硬件加速即可。 阅读详情
App开发功能之一 – 截图:

代码如下:

view.destroyDrawingCache();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap map = view.getDrawingCache();

但是在部分机型上总是会有 map 为 null 的情况发生。


日志分析:
View: LinearLayout not displayed because it is too large to fit into a software layer (or drawing cache), needs 15223680 bytes, only 8294400 available

貌似是触发了系统的某些限制,说是控件太大了。当然也确实是比较长的一个控件。


源码分析:
view.buildDrawingCache() -> 
buildDrawingCache(false) -> 
buildDrawingCacheImpl(autoScale)

在 buildDrawingCacheImpl 中:

if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) {
            if (width > 0 && height > 0) {
                Log.w(VIEW_LOG_TAG, getClass().getSimpleName() + " not displayed because it is"
                        + " too large to fit into a software layer (or drawing cache), needs "
                        + projectedBitmapSize + " bytes, only "
                        + drawingCacheSize + " available");
            }
            destroyDrawingCache();
            mCachingFailed = true;
            return;
}

width / height 在View正常显示的情况下都不为0,那么就是 projectedBitmapSize > drawingCacheSize 这个条件件被触发了:

final long projectedBitmapSize = 
                width * height * (opaque && !use32BitCache ? 2 : 4);
final long drawingCacheSize =
                ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize();

ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize() 得到的是系统所提供的最大的DrawingCache的值。


从上面的分析中可以看到View过大,超出了系统DrawingCache的限制导致了view.buildDrawingCache() 方法没有生效,最终 Bitmap map = view.getDrawingCache() 中map为null。

解决方案:
public static BitmapWithHeight getSimpleViewToBitmap(final View view, int width) throws OutOfMemoryError {
        if (view.getWidth() <= 0 || view.getHeight() <= 0) {
            view.measure(View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        }
        view.destroyDrawingCache();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap map = view.getDrawingCache();
        if (view.getHeight() > 0 && map == null)
            map = getViewBitmap(view);
        return new BitmapWithHeight(map, view.getMeasuredWidth(), view.getMeasuredHeight());
    }


    public static Bitmap getViewBitmap(View view) {
        Bitmap bitmap;
        if (view.getWidth() > 0 && view.getHeight() > 0)
            bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
        else if (view.getMeasuredWidth() > 0 && view.getMeasuredHeight() > 0)
            bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        else
            bitmap = Bitmap.createBitmap(com.blankj.utilcode.utils.ScreenUtils.getScreenWidth(), com.blankj.utilcode.utils.ScreenUtils.getScreenHeight() * 2, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);
        return bitmap;
    }
43、基于机器学习的GNSS信号质量监测方法 本文提出了一种基于支持向量机(SVM)的GNSS信号质量监测方法,旨在有效检测邪恶波形(EWF)威胁并抑制多径干扰对导航精度的影响。通过构建包含现场采集与合成数据的数据集,结合11个相关器测量值、链路预算、仰角和方位角等特征,采用RBF核函数的SVM模型进行分类。研究评估了不同平滑时间窗口对漏检率和误报率的影响,结果表明在约35-40秒平滑时间下性能趋于稳定,并可通过多数投票机制进一步优化检测性能。该方案适用于星载GNSS接收器,在计算资源受限条件下实现了高可靠性与低完整性风险的平衡。 阅读详情

相关推荐

摩擦纳米发电机测试系统全解析:从硬件配置到软件控制

本文全面解析摩擦纳米发电机(TENG)测试系统,涵盖硬件配置、软件控制及系统集成。详细介绍NI USB-6003等采集卡的选择与使用,以及一体化控制软件的功能与优势,帮助研究人员高效评估纳米材料发电性能。系统支持自动测试与数据分析,显著提升测试效率与准确性。

weixin_28720767的博客 460

View not displayed because it is too large to fit into a software layer (or drawing cache), needs 28

描述 在自定义view中,我设置了自定义view的宽度大小如下: <myView android:layout_width="match_parent" android:layout_height="5000px" android:visibility="visible" /> 结果view不能绘制,直接不会回调onDraw方法,提示如下: View not displayed because it is too large to fit int

楠之枫雪的博客 3122

DSP(数字信号处理器)技术概要

数字信号处理器(digital signal processor,DSP)是一种用于数字信号处理的可编程微处理器,它的诞生与快速发展,使各种数字信号处理算送得以实时实现,为数字信号处理的研究和应用打开了新局面,提供了低成本的实际工作环境和应用平台,推动了新的理论和应用领域的发展。目前,DSP技术在通信、航空、航天。雷达、工业控制、医疗、网络及家用电器等各个领域都得到了广泛应用。 1.1 DSP系统和芯片的结构特点1.1.1 DSP系统的基本结构通过传感数将非电物理量转换为模拟电信号,预处理一般包括放大器和滤

m0_46582485的博客 2万+

View的getDrawingCache为空,解决办法

这两天帮同事解决一个问题; View.getDrawingCache获得数据始终为null,但是在某些设备上并不为null,纠结够 久啊,网上说了一些原因: 1) (mViewFlags & WILL_NOT_CACHE_DRAWING) == WILL_NOT_CACHE_DRAWING  这个值为true 2) (mViewFlags & DRAWING_CACHE_ENABLED)

人生百年几今日,今日不为真可惜。 2万+

Diebold-Mariano检验

给定两个预测的预测结果,我们希望比较他们的预测结果,以用于预测模型精度的比较。 Diebold-Mariano检验本质是一个t检验,用于检验替代预测的两个损失序列的平均值是否相等。即,它是一系列损失差的零均值的t检验。在存在自相关的情况下,它使用损失差分时间序列标准差的自相关一致性估计。 注意,在使用DM检验式时,假设损失序列是平稳的。 另外,DM检验在小样本数据时往往会拒绝零假设。对于小样本数据,推荐Harvey, Leybourne and Newbold (HLN)检验【1】; 参考文献 【1】htt

weixin_43948357的博客 6565

闲人闲谈PS之一项目库存跨公司业务STO解决方案--SAP闲人的开篇

写这篇文章之前,简单说一下发这篇文章的动机。也算是在SAP这一行干了快10多年,在对一个模块了解越来越深入,越发觉自己的SAP知识浅薄。总的来说,和多数顾问一样,对于**标准功能**的应用业务场景理解还是存在或多或少的知识盲区。 因为一个偶然,看到SAP团子君的文章,分享了很多干货文章。这也是自己一直想做的时候,不管水平高低与否,分享本身就意味着提升。好了废话不多说,先在优快云上发一篇吧,困惑自己将近10年的问题的解决方案。 业务场景:在项目型企业中,通常会有这样的业务,母公司和客...

SAP闲人的博客 9269

Android抛错:View W XXXView not displayed because it is too large to fit into a software layer (or draw

CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。

Zhang Phil 1331

【Linux】常见指令的使用

Linux常用指令

qq_74897518的博客 1479

view.getDrawingCache()为null

今天在写webview截取保存图片 在 onPageFinished中调用view.getDrawingCache一直为null带饭了很多资料都不行 最后自己加了个延时 奇迹出现好了, webview.postDelayed(new Runnable() { @Override public void run() { view.getDrawingCache(); } },200); ...

qq_32051433的博客 2297

宇树智能人形机器人模块化腿部动力系统技术拆解

o电机防摔防护板(3.1.5.1)→端盖总成(3.1.5.2)→电机外壳(3.1.5.4)的冲击力传递路径;o散热风扇(3.1.3.1)推动冷风→大腿基座腔体→散热片组(3.1.5.7)→中空大腿杆排出;o防御专利:覆盖“关节热管理风道接口标准”、“抗冲击结构身份编码”;o大腿杆腔体(3.1.3.4)内置反平行四边形机构,避免连杆外露。:力传感器(3.1.8.4.2)仅部署于足端,缺失关节力矩反馈。:更换行星减速器(3.1.5.5)需拆解整个电机模块;o热量传导路径:电机定子→外壳→散热片组。

weixin_50955533的博客 1232

YOLO26 魔术师专栏|全网独家首发!2026 原创级创新赋能 CV 全场景

基于 YOLO26 核心架构迭代,融合原创自研、2026 AAAI/CVPR/ICCV 顶会前沿成果,打造更高效、更灵活、更具创新性的计算机视觉解决方案!

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4372

Android:解决view.getDrawingCache()返回null的问题

Android:解决view.getDrawingCache()返回null的问题

books1958的专栏 8169

Redhawk:toggle rate从哪来?

redhwak中toggle rate的相关设置

m0_61544122的博客 8125

View.getDrawingCache()为Null的解决办法

在getDrawingCache()之前调用下面的代码 View.measure(                   MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),                   MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED))

蓝色的羽毛 1585

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android中恶心的getDrawingCache

1、更新View的Bitmap问题:http://hi.baidu.com/cmdmac/item/b9a822f87aa8171ba62988aa    最近要写一个可调整listviewitem的listview,当用户按下listitem的某个区域时,可以上下拖动item并放下时调整listitem的位置。在里面用了getDrawingCache来获取按下的listitem相应的bitma

YiRong 4317

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

获取view的bitmap图层

网上有一篇博客做过详细说明,当遇到bitmap = view.getDrawingCache(); 中bitmap 为空  == null时的处理办法。原文如下: Android中View转换为Bitmap及getDrawingCache=null的解决方法 1.前言   Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片;Coverfl

fm_Ecup的专栏 1122

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

AS报Permission denied之截取view(视图)

在最近的项目中遇到了这个Exception,自己在网上看来很多,但还是没有解决我的问题。这个问题就是在Bitmap bitmap=view.getDrawingCache()方法获取到bitmap,通过Debug我们可以发现其实bitmap为null;因为我们要设置图片缓存,在获取bitmap之前执行view.setDrawingCacheEnabled(true);和view.buildDraw

qq_35431229的博客 585

View的getDrawingCache为空,解决办法(1)

0;

2401_84121646的博客 519

对View进行截图 View.getDrawingCache return NULL

一般对View进行截图可以: view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap shotCut = Bitmap.createBitmap(view.getDrawingCache()); view.setDrawingCacheEnabled(false); 但是有时会遇到getDr

thinkinwm的专栏 1361

Android:getDrawingCache() = null的解决方法

zartzwj的专栏 480

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

Android中View转换为Bitmap及getDrawingCache=null的解决方法 1.前言   Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片;Coverflow中需要把一页一页的view转换为Bitmap、以便实现复杂的图形效果(阴影、倒影效果等);再比如一些动态的实时View为便于观察和记录数据、需要临时生成静态的Bi

Delion 1430
上一篇: Ubuntu 访问共享文件夹
下一篇: 算法题001 -- [二叉树的镜像] by java
jia-huan
博客等级 码龄12年 134粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值