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



我有一个使用alpha通道的imageView,圆形,基本上仅由黑色轮廓组成。但是,在简单的情况下,我需要显示imageview不是黑色的,而是白色。其他一切都需要保持不变。经过一番谷歌搜索,这就是我想到的:

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

这至少应该对ImageView产生一定的影响,但事实并非如此。好像第三行代码刚刚跳了起来。有人可以向我解释这是错误还是我?

直接在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);

最新更新