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

Xamarin, Android: ImageView.SetColorFilter() has NO effect whatsover on my 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 有一些影响,但事实并非如此。就像第 3 行代码刚刚被跳转一样。任何人都可以向我解释这是一个错误还是我?

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

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

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

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

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