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);
此外,默认情况下,从同一资源创建的单独 Drawable
s 将共享一个公共状态,因此如果您有多个 View
s 使用相同的资源图像,则在其中一个上设置过滤器也会影响所有其他人。在应用过滤器之前,您可以通过先调用 Mutate()
来强制为特定 Drawable
创建一个新的、单独的状态。例如,背景图片:
btnHeader.Background.Mutate().SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn);
我有一个 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);
此外,默认情况下,从同一资源创建的单独 Drawable
s 将共享一个公共状态,因此如果您有多个 View
s 使用相同的资源图像,则在其中一个上设置过滤器也会影响所有其他人。在应用过滤器之前,您可以通过先调用 Mutate()
来强制为特定 Drawable
创建一个新的、单独的状态。例如,背景图片:
btnHeader.Background.Mutate().SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn);