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

Java类中点击按钮修改ImageView内图标的颜色如何实现

核心问题说明

你现有代码的问题如下:

  1. ImageView 无原生setcolor()方法,调用不会生效
  2. 颜色资源需要定义在res/values/colors.xml中,通过R.color.red引用,你误用了控件标识类的R.id.red
  3. 直接设置backgroundColor修改的是ImageView的背景层,不会改动前景的图标内容,所以会出现全红方块的问题

可行实现方案

方案1:setColorFilter着色(全版本兼容)

该方案对纯色位图、矢量图标都适用,直接修改图标前景的非透明区域颜色:

ImageView Test = (ImageView) findViewById(R.id.TestImageIcon);
button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 添加这行即可,SRC_IN模式只会修改图标非透明区域的颜色
        Test.setColorFilter(ContextCompat.getColor(YourActivity.this, R.color.red), PorterDuff.Mode.SRC_IN);
    }
});

如果后续需要取消着色,调用Test.clearColorFilter()即可。

方案2:矢量图标专用Tint方案

如果你的图标是矢量资源(VectorDrawable),可以用tint方案实现,兼容性更好:

  1. 先把布局文件中的ImageView替换为androidx.appcompat.widget.AppCompatImageView,可以兼容低版本系统
  2. 代码修改如下:
AppCompatImageView Test = findViewById(R.id.TestImageIcon);
button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Test.setSupportImageTintList(ColorStateList.valueOf(ContextCompat.getColor(YourActivity.this, R.color.red)));
    }
});

注意事项

  • 提前在res/values/colors.xml中定义红色资源:<color name="red">#FFFF0000</color>
  • 如果图标是多色图,可根据需求调整PorterDuff.Mode的参数,纯色图标默认用SRC_IN即可满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:54:04