Xamarin,Android:ImageView.SetColorFilter()在我的ImageView上没有任何影响吗?

时间:2017-12-08 13:19:58

标签: android xamarin android-imageview

我有imageView使用alpha通道,是圆形的,基本上只由黑色轮廓组成。但是,在一个简单的例子中,我需要将imageview显示为不是黑色,而是显示为白色。其他一切都需要保持不变。经过一番谷歌搜索,这就是我提出的:

ImageButton btnHeader = new ImageButton(this);
btnHeader.SetBackgroundResource(Resource.Drawable.mainmenu_btn_news_bol);
btnHeader.SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn);

这应该至少对ImageView产生一些影响,但它并没有。就好像第三行代码被跳了一样。任何人都可以向我解释这是一个错误还是我?

1 个答案:

答案 0 :(得分:2)

直接在ImageButton上设置滤色器只会影响其源图像,而不会影响背景。也就是说,它会影响使用SetImage*()方法设置的图像。如果这就是您的意思,那么只需将SetBackgroundResource()来电更改为SetImageResource()

相反,如果您尝试专门过滤背景,则需要直接在背景Drawable上设置过滤器。例如:

btnHeader.Background.SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn);

此外,默认情况下,从同一资源创建的单独Drawable将共享一个公共状态,因此如果您有多个View使用相同的资源图像,那么在一个上设置过滤器会影响所有其他人也是如此。在应用过滤器之前,您可以首先在其上调用Drawable来强制为特定Mutate()创建新的单独状态。例如,使用背景图像:

btnHeader.Background.Mutate().SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn);