Random random=new Random;
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
ColorFilter cf = new PorterDuffColorFilter(Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255)),Mode.OVERLAY);
imageView.setImageResource(R.drawable.ic_bg_box);
imageView.setColorFilter(cf);
17
由于第一个答案对我不起作用:
//get ImageView
ImageView myImageView = (ImageView) findViewById(R.id.iv);
//colorid is the id of a color defined in values/colors.xml
myImageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.colorid)));
18 回答
您可以通过以下方式在代码中轻松更改色调:
imageView.setColorFilter(Color.argb(255, 255, 255, 255));
//白色调如果你想要色彩
对于Vector Drawable
UPDATE :
@ADev在他的回答here中有更新的解决方案,但他的解决方案需要更新的支持库--25.4.0或更高版本 .
大多数答案都是指使用
setColorFilter
,这不是最初的问题 .用户@Tad的方向正确his answer但它仅适用于API 21 .
要在所有Android版本上设置色调,请使用
ImageViewCompat
:请注意,在这种情况下
yourTint
必须是"color int" . 如果您有像R.color.blue
这样的颜色资源,则需要先加载颜色int:这对我有用
@Hardik没错 . 代码中的另一个错误是当您引用XML定义的颜色时 . 当您应该使用ID来定位颜色资源时,您只将id传递给
setColorFilter
方法,并将资源传递给setColorFilter
方法 . 重写下面的原始代码 .If this line is within your activity:
Else, you need to reference your main activity:
请注意,其他类型的资源也是如此,例如整数,bool,尺寸等 . 除了字符串,您可以直接在Activity中使用
getString()
,而无需先调用getResources()
(不要问我为什么) .否则,您的代码看起来不错 . (虽然我没有过多地调查
setColorFilter
方法......)在我尝试了所有方法后,它们对我不起作用 .
我通过使用另一个PortDuff.MODE得到解决方案 .
从Lollipop开始,BitmapDrawables的tint方法也适用于新的Palette类:
和
在旧版Android上,您现在可以使用DrawableCompat库
试试这个 . 它应该适用于支持库支持的所有Android版本:
您可以使用上述任何一项来使其工作 .
您可以在文档here上阅读有关DrawableCompat的更多有趣功能 .
简单而且一条线
从Lollipop开始,有一个名为ImageView#setImageTintList()的方法,您可以使用...优点是它需要
ColorStateList
而不是单一颜色,从而使图像的色调状态感知 .在前Lollipop设备上,您可以通过着色drawable然后将其设置为
ImageView
的图像drawable来获得相同的行为:由于第一个答案对我不起作用:
这似乎只适用于API 21,但对我来说这不是问题 . 您可以使用ImageViewCompat来解决该问题 .
我希望我能帮助任何人:-)
如果您的颜色具有十六进制透明度,请使用以下代码 .
清除色彩
我发现我们可以使用颜色选择器来设置色调:
XML:
section_arrowup_color.xml:
不要使用
PoterDuff.Mode
,使用setColorFilter()
它适用于所有人 .正如@milosmns所说,你应该使用
imageView.setColorFilter(getResouces().getColor(R.color.blue),android.graphics.PorterDuff.Mode.MULTIPLY);
此API需要颜色值而不是颜色资源ID,这是您的语句无效的根本原因 .
我在聚会上迟到了,但我没有看到我的上述情绪 . 我们也可以通过
setImageResource()
设置色调颜色(我的minSdkVersion是24) .所以,首先,您需要创建一个选择器并将其保存在
/drawable
资产文件夹中(我称之为ic_color_white_green_search.xml
)然后在代码中设置它:
如果您想将选择器设置为您的色调:
不是确切的答案,但更简单的替代方案:
将另一个视图放在图像顶部
根据需要(以编程方式)更改视图的 alpha 值以获得所需的效果 .
这是一个代码片段: