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
相关产品推荐
相关产品推荐

