我有一个使用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);