我尝试使用Image创建一个Android的CustomRenderer继承到ButtonRenderer。我想以编程方式更改图像的颜色,如iOS上的#
。
例如,我的CustomRenderer iOS:
TintColor
在Android上:
public class IconButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
var button = e.NewElement;
}
public override void Draw(CoreGraphics.CGRect rect)
{
base.Draw(rect);
// Here I change color of Image in Red.
Control.ImageView.Image = Control.ImageView.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate);
Control.ImageView.TintColor = UIColor.Red;
}
}
是Control
,没有图片属性,但Android.Widget.Button
具有图片属性,并使用Xamarin.Forms.Button
for Android。
如何使用Android格式访问带有更改颜色的图像?
答案 0 :(得分:1)
图片色调按钮Android Xamarin Forms
正如@Mathias Kirkegaard所说,在你的ButtonRenderer
中,你可以使用SetColorFilter来改变颜色:
Control.Background.SetColorFilter(Android.Graphics.Color.Blue, PorterDuff.Mode.SrcIn);
它在原生Android中有效,但在Xamarin.Forms
中有一些问题,它只会更改Button
背景颜色,如下所示:effect。希望有人能找到解决方案,如果我找到解决方案来解决这个问题,我会回来更新我的答案。
您可以使用插件:Tinted Image并添加点击事件来实现相同的功能。
Plugin.CrossPlatformTintedImage
nuget包在iOS,Android和UWP项目中初始化渲染器,如下所示:
Xamarin.Forms.Init();
TintedImageRenderer.Init();
在Xaml:
<ContentPage
...
xmlns:controls="clr-namespace:Plugin.CrossPlatformTintedImage.Abstractions;assembly=Plugin.CrossPlatformTintedImage.Abstractions"
...>
...
<controls:TintedImage x:Name="buttonImage" TintColor="Blue" Source="redDis.png"/>
...
</ContentPage>
在代码中,Adding a Tap Gesture Gesture Recognizer:
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) =>
{
// handle the tap
};
buttonImage.GestureRecognizers.Add(tapGestureRecognizer);
Effect after adding a click event on Tinted Image
如果您需要使用ImageButton
,可以参考此解决方案。我没有测试它,但您可以使用ImageButton from XLab。
XLab ImageButton源代码
XLab ImageButtonRenderer源代码
答案 1 :(得分:0)
在按钮上,您可以使用&#34; SetColorFilter(颜色)&#34;
您可以使用ContextCompat获取颜色:
var color = new Color(ContextCompat.GetColor(Context, Resource.Color.Green));
然后应用它:
yourButton.SetColorFilter(color)
不确定是否需要使用ImageButton而不是简单的Button。