一段时间以来,我一直在使用 Android Asset Studio 从从 Zeplin 导出的 SVG 文件中生成矢量可绘制对象,除了几次,它工作正常。但是今天,当我尝试使用生成的矢量可绘制对象时,我遇到了此异常。
android.view.InflateException: Binary XML file line #0: Error inflating class <unknown>
在同一个堆栈跟踪中:
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #0: invalid drawable tag gradient
我对 Android 中的矢量可绘制对象和 SVG 了解不多。矢量可绘制对象中不支持渐变吗?是否有解决此问题的方法,或者我是否需要使用 PNG?
我正在使用支持库版本:
com.android.support:support-v4:26.1.0
我正在使用
Android Studio 3.0
以下是 Android Asset Studio 生成的 VectorDrawable 文件:
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="360dp"
android:height="110dp"
android:viewportWidth="360.0"
android:viewportHeight="110.0">
<path
android:pathData="M82,46H0v64h360V46h-81.88v-0.3h-26.21c-14.25,0 -38.69,-6.2 -46.95,-25.93C200.99,10.25 193.27,0.52 180,0.47c-13.27,-0.05 -20.04,9.24 -24.75,19.3 -8.22,17.55 -24.66,26.19 -49.34,25.93H82V46z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startY="0.41999998688697815"
android:startX="0.0"
android:endY="110.0"
android:type="linear"
android:endX="360.0">
<item android:offset="0.0" android:color="#FFCB09FF" />
<item android:offset="1.0" android:color="#FF8A06FF" />
</gradient>
</aapt:attr></path>
</vector>
链接到原始 SVG 文件:https://drive.google.com/file/d/1Lj62xJv5IpYR5Lle7w1kMsFXh6y5PijK/view?usp=sharing
在Sublime上打开时的SVG内容:
<svg xmlns="http://www.w3.org/2000/svg" width="360" height="110" viewBox="0 0 360 110">
<defs>
<linearGradient id="a" x1="0%" y1="0%" y2="100%">
<stop offset="0%" stop-color="#CB09FF"/>
<stop offset="100%" stop-color="#8A06FF"/>
</linearGradient>
</defs>
<path fill="url(#a)" fill-rule="evenodd" d="M82 46H0v64h360V46h-81.876v-.299h-26.208c-14.25 0-38.69-6.198-46.946-25.93C200.99 10.252 193.27.52 180 .474c-13.27-.047-20.04 9.238-24.75 19.295-8.217 17.55-24.662 26.194-49.336 25.931H82V46z"/>
</svg>
android:fillColor with gradient 仅支持 API 24 (7.0)
参考: https://developer.android.com/reference/android/graphics/drawable/VectorDrawable.html
尝试添加“可绘制-v24”和“可绘制”文件夹中的相同矢量,没有渐变
属性 android:fillColor 仅在 OS 7.0 中受支持,
android:fillColor 指定用于填充路径的颜色。可以是颜色,也可以是颜色状态列表或渐变颜色(对于 SDK 24),可以是颜色(请参阅渐变颜色和渐变颜色项)。如果此属性是动画的,则动画设置的任何值都将覆盖原始值。如果未指定此属性,则不会绘制路径填充。
对于目录/drawable中的旧版本,我们可以放置没有渐变的矢量资产,例如:
<vector android:height="24dp" android:viewportHeight="651.95"
android:viewportWidth="531.48" android:width="24dp"
xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:pathData="M386.8,30.2c-48.5,0 -76.1,18 -121.1,18s-72.6,-18 -121.1,-18c-87.9,0 -144.7,83.3 -144.7,186 0,92.9 160,350.5 265.7,350.5 112.9,0 265.7,-257.6 265.7,-350.5C531.5,113.5 474.7,30.2 386.8,30.2Z">
<!--<aapt:attr name="android:fillColor">
<gradient android:endX="212457.73219299316"
android:endY="440836.2612554932"
android:startX="212457.73219299316"
android:startY="92857.94223999024" android:type="linear">
<item android:color="#FFFC3A11" android:offset="0.0"/>
<item android:color="#FFDA0300" android:offset="1.0"/>
</gradient>
</aapt:attr>-->
</path>
...
...
在带有渐变的 /drawable-24 目录中:
<vector android:height="24dp" android:viewportHeight="651.95"
android:viewportWidth="531.48" android:width="24dp"
xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:pathData="M386.8,30.2c-48.5,0 -76.1,18 -121.1,18s-72.6,-18 -121.1,-18c-87.9,0 -144.7,83.3 -144.7,186 0,92.9 160,350.5 265.7,350.5 112.9,0 265.7,-257.6 265.7,-350.5C531.5,113.5 474.7,30.2 386.8,30.2Z">
<aapt:attr name="android:fillColor">
<gradient android:endX="212457.73219299316"
android:endY="440836.2612554932"
android:startX="212457.73219299316"
android:startY="92857.94223999024" android:type="linear">
<item android:color="#FFFC3A11" android:offset="0.0"/>
<item android:color="#FFDA0300" android:offset="1.0"/>
</gradient>
</aapt:attr>
</path>
...
...
这个解决方案在build.gradle
中为我们工作
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
并使用 app:srcCompat
而不是 android:src
将带有渐变的矢量可绘制对象设置为 ImageView
。
问题内容: 这是我的问题…: 在我的活动中,我有一个和一个。我希望Button仅在显示某个可绘制对象时才执行操作。是的,这意味着该代码正在各种可绘制对象之间进行动画处理,从而使其不会中断我想要完成的工作。 没用 并且我将其范围缩小到“ if(vari(drawabledrawable == acertaindrawable)”行的错误。尽管Eclipse并没有公然报告两个可绘制对象是否相同的And
我使用的是23.4版的设计支持库。0.我已启用渐变标志: 我正在使用构建工具23.0版。2,但我仍然在KitKat或更低版本上获得。 当我使用或。 是的,我在每一个我使用抽绳的活动中都会用到这个 这是支持库的错误吗?
问题内容: 当我使用vector drawable设置通知的小图标时,出现以下异常: android.app.RemoteServiceException:从包com.qbes.xxx发布的错误通知:无法创建图标:StatusBarIcon(pkg = com.qbes.xxxuser = 0 id = 0x7f020082 level = 0 visible = true num = 0) 这是
问题内容: 我正在开发一个Android项目,并且选择显示图标是因为它具有适应性和动态性,但是我只能在运行Android且具有API 21或更高版本的设备上运行此应用程序。我的问题是如何在较低的Android版本(即API 14或更高版本)上使用。谢谢! 问题答案: 使用支持库23.2,一直到API v7都对Vector Drawables提供了真正的支持。建议通过添加以下内容来禁用该支持的先前版
问题内容: 我正在尝试为UILabel绘制渐变,但它只会绘制我看不到文本的颜色。我从这里看到了代码StackOverflow 我的修改: 和imageView的设置 代码的结果: 问题答案: 有一种更简单的方法来获取渐变作为。您可以使用。例如: 要将渐变应用于文本,下一步需要使用作为using 返回的图像。例如: 结果是: 迅捷的3.0:
在我的应用程序中,我必须为通知设置一个大图标。LargeIcon必须是位图,我的可绘制内容是矢量图像(Android中的新功能,请参见此链接)。问题是,当我尝试解码矢量图像资源时,返回空值。 以下是代码示例: 在本示例中,当我替换R.drawable时。vector_menu_objectifs带有“普通”图像,例如png,结果不为空(我得到了正确的位图)是否缺少什么?
我想让我的应用程序中的编辑文本行成为自定义颜色,所以我使用了一个可绘制线条的xml,并将其设置为我的编辑文本背景,即如何在EditText中更改线条颜色。 问题是我画的线现在表现为删除线,而不是出现在编辑文本的底部。有没有办法把它们移下来? 尝试设置Android:重力编辑文本和绘图。 http://i.stack.imgur.com/ncl9H.png
好的,这是我的代码。包装Mypanal;