android 5.0.X上实用SVG,其中包含科学计数法时出现crash

SVG在Android上的使用 阿里巴巴图片库:https://www.iconfont.cn/collections/detail?cid=9638 一:什么是SVG SVG是指可伸缩矢量图形 (Scalable Vector Graphics),它不同于传统的位图(像GIF、JPEG、PNG等都是位图图像格式),不是通过存储图像中每一点的像素值来保存与使用图形,而是通过 XML 文件来定义一个图形,通过一些特定的语法和规则来绘制出我们所需的图像——同样是使用一张图片,SVG 的方式是事先定义好怎么去画这个图,然后等要用的时候再把它 阅读详情

很坑的问题,但是很大,在所有Android5.0设备上,app直接crash。google baidu 都没用,无果,一点一点的排查。最终找到原因。因为项目中使用了很多SVG,SVG都是使用工具生成出来的,所以避免不了默写SVG包含科学计数法。
问题来了,SVG中的科学计数法是啥样?
直接搜‘e-’像这样
这里写图片描述
如果包含这种,你运行在Android5.0的设备上,应该直接crash,具体如下

04-10 09:33:25.713 19306-19306/com.robin.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.robin.myapplication, PID: 19306
                                                                         java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                                             at android.util.PathParser$PathDataNode.addCommand(PathParser.java:335)
                                                                             at android.util.PathParser$PathDataNode.nodesToPath(PathParser.java:260)
                                                                             at android.graphics.drawable.VectorDrawable$VPath.toPath(VectorDrawable.java:1265)
                                                                             at android.graphics.drawable.VectorDrawable$VPathRenderer.drawPath(VectorDrawable.java:950)
                                                                             at android.graphics.drawable.VectorDrawable$VPathRenderer.drawGroupTree(VectorDrawable.java:931)
                                                                             at android.graphics.drawable.VectorDrawable$VPathRenderer.draw(VectorDrawable.java:938)
                                                                             at android.graphics.drawable.VectorDrawable$VectorDrawableState.updateCachedBitmap(VectorDrawable.java:705)
                                                                             at android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:280)
                                                                             at android.view.View.getDrawableRenderNode(View.java:15396)
                                                                             at android.view.View.drawBackground(View.java:15347)
                                                                             at android.view.View.draw(View.java:15113)
                                                                             at android.view.View.updateDisplayListIfDirty(View.java:14056)
                                                                             at android.view.View.getDisplayList(View.java:14079)
                                                                             at android.view.View.draw(View.java:14846)
                                                                             at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                                             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                                             at android.view.View.updateDisplayListIfDirty(View.java:14051)
                                                                             at android.view.View.getDisplayList(View.java:14079)
                                                                             at android.view.View.draw(View.java:14846)
                                                                             at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                                             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                                             at android.view.View.updateDisplayListIfDirty(View.java:14051)
                                                                             at android.view.View.getDisplayList(View.java:14079)
                                                                             at android.view.View.draw(View.java:14846)
                                                                             at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                                             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                                             at android.view.View.updateDisplayListIfDirty(View.java:14051)
                                                                             at android.view.View.getDisplayList(View.java:14079)
                                                                             at android.view.View.draw(View.java:14846)
                                                                             at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                                             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                                             at android.view.View.updateDisplayListIfDirty(View.java:14051)
                                                                             at android.view.View.getDisplayList(View.java:14079)
                                                                             at android.view.View.draw(View.java:14846)
                                                                             at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                                             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                                             at android.view.View.updateDisplayListIfDirty(View.java:14051)
                                                                             at android.view.View.getDisplayList(View.java:14079)
                                                                             at android.view.View.draw(View.java:14846)
                                                                             at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                                             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                                             at android.view.View.draw(View.java:15125)
                                                                             at android.widget.FrameLayout.draw(FrameLayout.java:592)
                                                                             at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2595)
                                                                             at android.view.View.updateDisplayListIfDirty(View.java:14056)
                                                                             at android.view.View.getDisplayList(View.java:14079)
                                                                             at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:266)
                                                                             at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:272)
                                                                             at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:311)
                                                                             at android.view.ViewRootImpl.draw(ViewRootImpl.java:2492)
                                                                             at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2337)
                                                                             at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1968)
                                                                             at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
                                                                             at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
                                                                             at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
                                                                             at android.view.Choreographer.doCallbacks(Choreographer.java:580)
                                                                             at android.view.Choreographer.doFrame(Choreographer.java:550)
                                                                             at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
                                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:135)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5264)
                                                                            at

截图如下:
这里写图片描述
这里写图片描述
关于解决方案:要是工具(PhotoShop)转出来的带有科学计数法,比如2.567e-10,那么我们就要转化成小数格式。(学前班的数学老师告诉过我,要把科学计数法转换成小数,小数点向前移动一位,不足补零)所以,
2.567e-10=0.0000000002567,大家可以看一下效果,跟科学计数法相同,说明可以代替科学计数法。
附赠一个web端的转SVG网站
http://inloop.github.io/svg2android/

android13 下拉栏修改为圆形图标 这两个类其实在android11有实现,我们只需要借鉴下,再给这两个文件编进去烧录后发现systemUi崩溃,查看发现animator有个空指针异常。这里就是要添加图标的地方,现在的图标是QSTileViewImpl这个类实现的,我们要实现自己的肯定得给覆盖掉。我们想要将他改成圆形的图标,然后将字体修改到图标下方。首先我们要找到图标是在哪里添加进去的。这是我们新的实现,看下这个类的实现。在android13 默认使用了。他继承了一个类,我们也得实现。这样就可以实现圆形图标了, 阅读详情

相关推荐

抽取类似svg_android库中java文件,以使SVG适配Android5.0以下

抽取类似svg_android库中适合5.0以下的,且可以解析svg的java文件,自定义类似svg的控件,进行Android工程的搭建

Android 数字显示带E(科学计数法)

我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子: public class ImmUtils { public static void dfFormat(Object object) { double pi = 3.1415927;//圆周率 //取一位整数 ...

帅次的博客 1万+

手把手教你用Arduino搭建惠斯通电桥:从原理到代码实现(附完整电路图)

本文详细介绍了如何利用Arduino搭建惠斯通电桥,从硬件选型、电路设计到代码实现和校准技巧,提供完整的电路图和实用代码示例。特别适合电子爱好者和创客学习高精度电阻测量技术,并扩展应用于应变片测量和温度监测等实际项目。

o4p5q6r7s的博客 403

EditText不显示科学计数法

问题 Android EditText显示一个特别大的整数(比如25位),不允许用科学计数法显示。 解决 作为Android外行人,我提出在末尾加入一个Android 无法显示的特殊字符,使得这串特别大的整数无法用科学计数法显示,比如ASCII码中的第14位。测试后,Android 将该字符显示为一个空格,整体效果达到了预期。 ...

qq_25844803的博客 867

从零构建腾讯滑块验证码破解引擎:逆向工程与实战对抗

本文深入解析腾讯滑块验证码(原天御验证码)的防护机制,包括环境感知层、行为分析层和验证决策层的核心技术。通过JSVMP虚拟机保护、轨迹验证算法和动态加密体系,腾讯验证码实现了高效的人机识别。文章还提供了安全研究实践指南,涵盖环境模拟和验证码识别方案,并探讨了防御对抗的演进趋势与合规研究建议。

rl6adventurer的博客 831

NXP KW47蓝牙MCU低功耗实测:从8μA睡眠到5年续航的优化实战

在物联网和嵌入式系统开发中,低功耗设计是决定电池供电设备续航能力的关键技术。其核心原理在于通过事件驱动、状态机管理和精细的电源域控制,使设备在空闲时进入深度睡眠,仅在需要时快速唤醒工作,从而将平均电流从毫安级降至微安级。这项技术的工程价值在于能够实现纽扣电池供电设备长达数年的使用寿命,广泛应用于智能家居传感器、可穿戴设备、资产追踪和工业监测等领域。以NXP KW47系列无线MCU为例,其集成的Arm Cortex-M33双核与专用射频单元,配合多级睡眠模式和高效DC-DC转换器,为超低功耗蓝牙应用提供了硬件

weixin_30162121的博客 257

Android应用之——百度地图定位返回4.9E-324的解决方案

用百度定位的时候一直定位不到,拿到的经纬度都是4.9E-324,Google了一下,发现不少人出现这个问题,经过一番研究,最终解决了这个问题。 目前看来,出现这个问题说明定位失败了,定位失败返回的就是这个值,定位失败的原因就是库加载失败。 也就是百度地图最开始进行初始化的时候失败了,所以返回了这个错误。 网上一般有这么几种情况: 情况一: libs里面缺少armeabi-v

Micheal_Yang's Blog 1万+

一阶电路基础知识

一阶电路(First-order circuit)是指由一个电感(L)或一个电容(C)和一个电阻(R)组成的电路。根据电感或电容的位置,一阶电路可以分为RC电路、RL电路、LC电路、RLC电路。一阶电路常用于滤波、放大、时序控制等各种电子设备和系统中。通过调整电阻、电容或电感的数值,可以改变电路的频率响应、滞后/提前相位等特性,实现不同的功能和性能一阶、二阶电路区别一阶电路由一个电容或一个电感与一个电阻组成,而二阶电路则由两个电容或两个电感与一个电阻组成。

weixin_45365488的博客 1万+

Tableau原生词云实现:无需插件、Python或导出数据

词云是一种将文本中高频词汇按权重可视化呈现的基础NLP分析技术,其核心原理在于文本分词、频次聚合与空间坐标映射的协同。在BI工具中,Tableau虽无内置词云图表类型,但凭借SPLIT、INDEX、PREVIOUS_VALUE等原生函数及极坐标布局能力,可完全规避第三方扩展与外部脚本依赖,实现高可控、可审计、可交互的动态词云。该方案具备强安全性(满足金融/医疗合规要求)、实时筛选联动能力(如点击词触发下游视图刷新)和轻量部署优势(仅需Desktop 2020.4+),广泛适用于舆情分析、客服工单挖掘、员工反

weixin_33670713的博客 437

基于Java+Maven+Testng+RestAssured+Allure+Jenkins搭建一个接口自动化框架

2、有一个提取表达式列,通过编写每个接口的JSON提取表达式,后边在解析Excel时,对接口执行后的响应数据用该表达式提取出来,保存到环境变量,如果某些接口需要前置接口的响应数据,我们就可以从环境变量中获取该数据出来,从而解决了接口关联的问题。1、在之前介绍过全局配置类Contants中添加一个控制台日志开关控制权限,如果选择为false,则控制台不输出日志,将日志输出到allure报表,选择为true,则在控制台输出日志,不输出到allure报表。

专注于技术分享的博主 1185

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 526

android矢量地图画法_Android 我们的矢量地图,放大不失真

地图的轮廓看起来是不规则的,不规则轮廓就是地图的路线。路线在手,说走就走。我们一起来写一个矢量地图。先来了解矢量图形,XML 文件中定义为一组点、一组线条和一组曲线及其相关颜色信息。矢量图形 svg 用 XML语言来编写,文件是纯粹的 XMLSVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失SVG 是W3C的标准可在图像质量不下降的情况下被放大使用矢量图形的主要优势在于图片可缩放。可以在不...

weixin_39749501的博客 529

LTE 中设置voice/data centric的差异

1. 什么是voice centric和data centric Voice centric和data centric的差别在于以语音为中心还是以数据为中心。这里的以某某为中心可不是说说而已。举个栗子,UE一般搜网注册都会按照LUG(LTE->UMTS->GSM)或者LC(LTE->CDMA)的顺序进行,如果UE(未开通VOLTE)注册到LTE时,网络提示不支持语音,比如CSFB。UE就必须disable LTE后回到GU或者CDMA,否则留在不能语音的网络下,UE就会...

alimingh的博客 5235

android科学计数法转换成数字_「知识点,天天学」3.科学计数法

例1:科学计数法首先要确定a,然后再确定n。对于a的要求是1≤lal<10,可知本题的a=5.5,不是55也不是0.55。然后再确定n,确定n根据原数绝对值的大小分为两种情况,此题55000000一共有8位数,所以n=7,即答案为D。同时也可以根据小数点的移动来确定,5.5要怎么样变化才能变成55000000呢,即小数点要向右移动7位,所以n=7。例2:例3:解析:由题意,只要将2.05的小数点向...

weixin_39792803的博客 1379

3、★☛基于STM32的手机通过wifi控LED灯√♠★

3、基于STM32的手机通过wifi控LED灯 文章目录3、基于STM32的手机通过wifi控LED灯1、Introduce介绍1.1、课题背景及其意义1.2、 国内外的研究状况2、方案的设计2.1、控制方案的确定2.2、控制方式的选择2.2.1、 单片机芯片的选择方案一方案二方案三方案四2.2.2、无线遥控模块的选择方案一方案二方案三3、硬件电路的设计3.1、系统的功能分析及体系结构设计3.1.1、系统功能分析3.1.2、系统总体结构3.2、模块电路的设计3.2.1、 STM32单片机核心电路设计3.2.

行走的皮卡丘 2963

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android SVG矢量图形打造中国地图

SVG矢量图形打造不规则的自定义控件-手写中国地图 技术点:svg技术起源详解 svg解决复杂控件与动画的解决之路 在不规则的控件中如何判断事件边界 ?? svg实现控件自动缩放 svg 概念 :矢量图形 SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺寸的情况...

hongxue8888的博客 1730

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android string数字字符串如何使用科学计数法,C#实现把科学计数法(E)转化为正常数字值...

C#实现把科学计数法(E)转化为正常数字值1.字符串值中包含E等科学计数法,比如12E-2,需要进行转化为普通数值0.12,2.转化函数如下:复制代码 代码如下:private Decimal ChangeDataToD(string strData){Decimal dData = 0.0M;if (strData.Contains("E")){dData = Convert.ToDecimal...

weixin_36340926的博客 1507

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android获取数据时 浮点型整数位数值(超8位)过大导致科学计数法

今天在调接口时,有个实体变量A我定义float类型,当该变量的整数值超过8位的时候会出现科学计数法的情况 例如 19085161.59,显示成1.454654864E的情况本来可以用String类型接收该字段,但由于需要该数值做运算,所以想不改变原有类型一开始想过显示时通过 String.format("%." + m + "f", f);方式处理,数值比较时用原有数据,但想想以后其他数据如果要显...

u013008419的专栏 5125

Android开发得到的数据结果不以科学计数法显示的设置

测试 tv = findViewById(R.id.tv); double stt = 999999999999.3344; DecimalFormat format = new DecimalFormat("#,##0.00");//不以科学计数法显示,并把结果用逗号隔开保留两位小数 BigDecimal bigDecimal = new BigDecimal(stt);//不以科学计数法...

juer2017的博客 7511

-9 逆序输出一个整数的各位数字_计算机基础知识: 信息数字化

计算机、数据与信息无符号位数的表示(一)、四种常用的数制及它们之间的相互转换:进制基数基数个数权进数规律十进制0、1、2、3、4、5、6、7、8、91010i逢十进一二进制0、122i逢二进一八进制0、1、2、3、4、5、6、788i逢八进一十六进制0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F1616i逢十六进一注意:在进行十六进制运算时,A、B、C、D、E、F六个字母...

weixin_39999730的博客 794

Android中使用动态的VectorDrawable

接上篇继续,讲解使用动态的VectorDrawable 上篇链接: 在Android Studio中生成矢量图VectorDrawable的三种方式以及静态VectorDrawable的使用 导言 VectorDrawable有两个优点,一个是缩放不失真,另一个是使PNG的体积,大幅度减小,那么如果仅仅只有这两个优点,其实我是并不需要使用VectorDrawable,或者说,这并不能成为我们使用V...

weixin_43912367的博客 1378

android能用svg格式,Android:在res中使用SVG会导致错误:“文件名必须以.xml或.png结尾”...

我只是更新了Android Studio 1.2.1.1,现在gradle在我的资源文件夹中遇到了svg问题。 我一直在使用SVG,没有任何问题,我希望他们将来会被“允许”。:app:mergeDebugResources :app:mergeDebugResources FAILED /home/petergriffin/folder1/another-app/MyAwesome-App/app...

weixin_29206669的博客 1128

在Android中使用SVG图遇到的坑

前一段时间我见到我们的前端在用svg格式的图片,我就在想这个东西能不能在Android中使用,进过百度后发现这个东西在Android中还真能用。先简单说一下SVG图怎么在Android中使用第一步: 将你的Activity继承AppCompatActivity。第二步 在你需要使用SVG图的地方(也就是ImageView需要这样)用app:srcCompat代替android:src至于SVG图

ZhangLei280的博客 1万+

解决Android使用Svg兼容5.0以下手机导致OOM的问题

从上图别人测试结果可知,开启setCompatVectorFromResourcesEnabled(true)之后,每打开一个使用svg的页面,会生成一个新的Resources实例,从而导致的OOM。从官方文档可知,开启setCompatVectorFromResourcesEnabled(true)之后可能存在问题。避免vector导致OOM1、xml中使用app:srcCompat来引用svg...

笨鸟的专栏 1743
上一篇: Android代码规范----一位2年外包开发者的心声
下一篇: android 跳转Facebook和Instagram
DreamCarMustang
博客等级 码龄12年 10粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值