图像色调按钮Android Xamarin Forms

时间:2018-01-17 15:14:57

标签: xamarin.forms xamarin.android

我尝试使用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格式访问带有更改颜色的图像?

2 个答案:

答案 0 :(得分:1)

  

图片色调按钮Android Xamarin Forms

Orignal Image

解决方案1:

正如@Mathias Kirkegaard所说,在你的ButtonRenderer中,你可以使用SetColorFilter来改变颜色:

Control.Background.SetColorFilter(Android.Graphics.Color.Blue, PorterDuff.Mode.SrcIn);

它在原生Android中有效,但在Xamarin.Forms中有一些问题,它只会更改Button背景颜色,如下所示:effect。希望有人能找到解决方案,如果我找到解决方案来解决这个问题,我会回来更新我的答案。

解决方案2:

您可以使用插件:Tinted Image并添加点击事件来实现相同的功能。

  1. 安装Plugin.CrossPlatformTintedImage nuget包
  2. 在iOS,Android和UWP项目中初始化渲染器,如下所示:

    Xamarin.Forms.Init();    
    TintedImageRenderer.Init();
    
  3. 在Xaml:

    <ContentPage 
        ...
        xmlns:controls="clr-namespace:Plugin.CrossPlatformTintedImage.Abstractions;assembly=Plugin.CrossPlatformTintedImage.Abstractions"
         ...>
         ...
         <controls:TintedImage x:Name="buttonImage" TintColor="Blue" Source="redDis.png"/>
    ...
    </ContentPage>
    
  4. 在代码中,Adding a Tap Gesture Gesture Recognizer

    var tapGestureRecognizer = new TapGestureRecognizer();
    tapGestureRecognizer.Tapped += (s, e) => 
    {
        // handle the tap
    };
    buttonImage.GestureRecognizers.Add(tapGestureRecognizer);
    
  5. Effect after adding a click event on Tinted Image

    解决方案3:

    如果您需要使用ImageButton,可以参考此解决方案。我没有测试它,但您可以使用ImageButton from XLab

答案 1 :(得分:0)

在按钮上,您可以使用&#34; SetColorFilter(颜色)&#34;

您可以使用ContextCompat获取颜色:

var color = new Color(ContextCompat.GetColor(Context, Resource.Color.Green));

然后应用它:

yourButton.SetColorFilter(color)

不确定是否需要使用ImageButton而不是简单的Button。