如何让ImageView使用的Android矢量资源不透明
解决Android矢量资源感叹号透明问题
我来帮你捋清楚问题出在哪,你遇到的情况是因为矢量根标签的tint属性覆盖了path的填充色,导致你修改fillColor完全没效果。
问题根源
你的<vector>标签里设置了android:tint="#4CAC78",这个属性会给整个矢量图形套上一层颜色滤镜,相当于把整个SVG统一染成这个绿色。而你的原始代码把图标主体和感叹号合并成了同一个路径,填充色设为白色,经过tint滤镜后,整个图标(包括感叹号)都变成了#4CAC78——如果你的布局背景也是类似色调,感叹号自然就看起来像透明的了。
解决方案
最靠谱的办法是把图标主体和感叹号拆成两个独立的<path>标签,分别控制它们的颜色,这样就能让感叹号显示为不透明的指定颜色:
<vector android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 图标主体(原绿色部分) --> <path android:fillColor="#4CAC78" android:pathData="M23,12l-2.44,-2.78 0.34,-3.68 -3.61,-0.82 -1.89,-3.18L12,3 8.6,1.54 6.71,4.72l-3.61,0.81 0.34,3.68L1,12l2.44,2.78 -0.34,3.69 3.61,0.82 1.89,3.18L12,21l3.4,1.46 1.89,-3.18 3.61,-0.82 -0.34,-3.68L23,12z"/> <!-- 感叹号部分,设置为黑色不透明 --> <path android:fillColor="@android:color/black" android:pathData="M13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z"/> </vector>
额外小提示
- 之后要调整主体颜色的话,直接修改第一个path的
fillColor就行,不用依赖tint属性,避免全局滤镜影响其他路径。 - 如果你非要保留
tint属性,可以给感叹号的路径加android:tintMode="src_atop",强制它用自己的填充色不受全局tint影响,但拆分路径的方式更直观可靠。
内容的提问来源于stack exchange,提问作者VanessaF
相关产品推荐
相关产品推荐

