You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:52:36