我有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
产生一些影响,但它并没有。就好像第三行代码被跳了一样。任何人都可以向我解释这是一个错误还是我?
答案 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);