【问题标题】:Image tint Button Android Xamarin Forms图像色调按钮 Android Xamarin 表单
【发布时间】:2018-06-26 12:33:55
【问题描述】:

我尝试创建一个用于 Android 的 CustomRenderer 继承到带有图像的 ButtonRenderer。我想像 iOS 上的 TintColor 一样以编程方式更改图像的颜色。

例如,我的 CustomRenderer iOS :

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;
    }


}

在安卓上: ControlAndroid.Widget.Button 并且没有 Image 属性,但 Xamarin.Forms.Button 具有属性 Image 并且在 Android 上使用 Android.Widget.Button

如何访问 Android 格式的图像以更改颜色?

【问题讨论】:

    标签: xamarin.forms xamarin.android


    【解决方案1】:

    图像色调按钮 Android Xamarin 表单

    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);
      

    Effect after adding a click event on Tinted Image

    解决方案 3:

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

    【讨论】:

    • 解决方案 1 不是我的目标。解决方案 3:“不再维护此项目。它可能不适用于较新版本的 Xamarin.Forms。”解决方案 2 是最好的,但我尝试使用 tapGestureRecognizer 创建渲染器,因为我需要在解决方案中多次使用。
    • @MatthieuLemonnier,您可以在Xaml 中设置TapGestureRecognizer,例如this
    • 谢谢,解决方案 2 就是答案。
    • @MatthieuLemonnier,快乐的编码。 :)
    【解决方案2】:

    在按钮上你可以使用“SetColorFilter(color)”

    您也许可以使用 ContextCompat 获取颜色:

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

    然后应用它:

    yourButton.SetColorFilter(color)

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

    【讨论】:

    • SetColorFilter() not found for button Android.Widget.Button 也许我需要 ImageButton 但 Xamarin.Forms 没有 ImageButton。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2020-03-16
    • 1970-01-01
    • 2017-05-27
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多