我在这个XML中有一个可绘制的对象:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:endColor="@color/transparent"
android:gradientRadius="200dp"
android:startColor="?attr/primaryDarkTransparent"
android:type="radial" />
</shape>
当startColor
使用?attr/primaryDarkTransparent
表示以下内容时,XML会导致崩溃:Caused by: java.lang.RuntimeException: org.xmlpull.v1.XmlPullParserException: <internal><gradient> tag requires 'gradientRadius' attribute with radial type Caused by: org.xmlpull.v1.XmlPullParserException: <internal><gradient> tag requires 'gradientRadius' attribute with radial type
戏剧性的故事是,当我在solid
和stroke
中使用attr
时,它工作得很好,但我不知道在gradient
中到底发生了什么。
如有任何建议,我们将不胜感激。
2条答案
按热度按时间o4hqfura1#
您的
shape
有两个问题。1.在Android L(API 21)以下版本中,您无法在自定义可绘制对象中使用属性,因此应将
?attr/primaryDarkTransparent
替换为color
引用。gradientRadius
应为float
。例如200
6rvt4ljy2#
***注:***这不是问题的完整/通用解决方案,因为结果将只有一种颜色,并且它将应用于ImageView(尽管它可以用于其他类型的视图)。
创建一个形状,使其具有从某种具有任意透明度百分比的颜色(例如,黑色,无论是哪种颜色,稍后都会被覆盖)到具有另一透明度百分比的相同颜色的渐变。
然后,在ImageView中添加以下内容(如果需要在前景中添加):
这里我们使用主题中的attr来覆盖渐变中使用的颜色。
或者这些作为背景:
我们的ImageView覆盖另一个ImageView和一个TextView。