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

Android Kotlin中如何修改ImageView内Drawable的颜色

Android 矢量图标动态设置ARGB颜色

你可以通过以下几种方式为ImageView中的矢量图标设置自定义ARGB颜色:

方法一:直接调用ImageView的setColorFilter

这是最简便的实现方式,直接通过setColorFilter方法传入目标ARGB颜色值即可:

// Kotlin 代码
val pointImageView = findViewById<ImageView>(R.id.point)
// 示例ARGB值,可按需修改四个参数(透明度、红、绿、蓝)
val customColor = Color.argb(255, 76, 85, 228)
pointImageView.setColorFilter(customColor, PorterDuff.Mode.SRC_IN)
// Java 代码
ImageView pointImageView = findViewById(R.id.point);
int customColor = Color.argb(255, 76, 85, 228);
pointImageView.setColorFilter(customColor, PorterDuff.Mode.SRC_IN);

PorterDuff.Mode.SRC_IN是适配矢量图的常用混合模式,能保证颜色仅覆盖图标填充区域,不影响透明部分。

方法二:独立修改Drawable(避免影响其他实例)

如果同一个矢量图标被多个ImageView复用,直接修改会导致所有实例颜色同步变化,此时需要先调用mutate()生成独立的Drawable副本:

// Kotlin 代码
val pointImageView = findViewById<ImageView>(R.id.point)
val drawable = pointImageView.drawable?.mutate() ?: return
val customColor = Color.argb(255, 76, 85, 228)
drawable.setColorFilter(customColor, PorterDuff.Mode.SRC_IN)
pointImageView.setImageDrawable(drawable)
// Java 代码
ImageView pointImageView = findViewById(R.id.point);
Drawable drawable = pointImageView.getDrawable();
if (drawable == null) return;
drawable = drawable.mutate();
int customColor = Color.argb(255, 76, 85, 228);
drawable.setColorFilter(customColor, PorterDuff.Mode.SRC_IN);
pointImageView.setImageDrawable(drawable);

补充说明

  • 你的矢量图ic_vector_point_image当前的android:fillColor设置是可修改的,无需额外调整。
  • 若需兼容Android 5.0(API 21)以下版本,可使用VectorDrawableCompat处理:
// Kotlin 兼容代码
val drawable = VectorDrawableCompat.create(resources, R.drawable.ic_vector_point_image, null)?.mutate()
val customColor = Color.argb(255, 76, 85, 228)
drawable?.setColorFilter(customColor, PorterDuff.Mode.SRC_IN)
pointImageView.setImageDrawable(drawable)

内容的提问来源于stack exchange,提问作者onesector

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:28:14