Java类中点击按钮修改ImageView内图标的颜色如何实现
核心问题说明
你现有代码的问题如下:
- ImageView 无原生
setcolor()方法,调用不会生效 - 颜色资源需要定义在
res/values/colors.xml中,通过R.color.red引用,你误用了控件标识类的R.id.red - 直接设置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方案实现,兼容性更好:
- 先把布局文件中的ImageView替换为
androidx.appcompat.widget.AppCompatImageView,可以兼容低版本系统 - 代码修改如下:
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
相关产品推荐
相关产品推荐

