3

在 Xamarin.Android 中,要使用 FFImageLoading 加载图像,必须使用 ImageViewAsync 而不是标准 ImageView。

如果我想将图像加载到 ImageButton 中,我找不到可以使用的东西。没有找到“ImageButtonAsync”。

4

2 回答 2

5

不知道这是否相关。我给了我的 svg 一个点击手势,让它像一个按钮一样工作。

首先在您的 xaml 中引用 FFImageLoading.Svg.Forms

namespace:FFImageLoading.Svg.Forms;assembly=FFImageLoading.Svg.Forms"

第二个用点击手势添加 svgImage

    <ffimageloadingsvg:SvgCachedImage Source="YourImageSource" >
                    <ffimageloadingsvg:SvgCachedImage.GestureRecognizers>
                        <TapGestureRecognizer NumberOfTapsRequired="1" Command="{Binding YourCommand}"/>
                    </ffimageloadingsvg:SvgCachedImage.GestureRecognizers>
    </ffimageloadingsvg:SvgCachedImage>

您将在 ViewModel 的构造函数中调用它来初始化命令

YourCommand= new DelegateCommand(async () => await ExecuteYourCommandAsync());

创建绑定到 xaml 文件的属性

    public ICommand YourCommand
    {
        get => yourCommand;
        set => SetProperty(ref yourCommand, value);
    }

    private ICommand yourCommand;

await ExecuteYourCommandAsync 是您创建的一种方法。在那里你将把你真正想要点击手势做什么的逻辑放在里面。

您也可以使用命令传递对象。让我们知道这是否有意义

于 2018-09-05T13:28:35.440 回答
2

AFAIK 没有特别ImageButton适用于 FFImageLoading 但您可以直接使用ImageViewAsync将其设置为android:clickable="true"并添加点击事件。

正如这里所说, anImageButton只是ImageView默认情况下具有非空背景的一个,而且 ImageButton.onSetAlpha() 方法总是返回 false,scaleType 设置为 center 并且它总是膨胀为可聚焦的。因此,如果您需要该行为,您可以添加它。

另一种方法是您创建ImageButton可以处理 FFImageLoading 图像加载的自定义。为此,您可以继承ImageViewAsync并添加前面段落中解释的行为。这样您就可以直接使用 FFImageLoading API,因为此自定义控件继承了ImageViewAsync.

取而代之的是,您还可以添加自定义加载逻辑,如此处所述,继承自ImageLoaderTask并调用它ImageService.Instance.LoadImage(customImageTask)

最后另一种方法(但hackish和非性能)是创建一个ImageViewAsync只是保存FFImageLoading的结果并在成功回调中设置Drawable ImageButton

var myImageButton = myView.FindViewById<ImageButton>(Resource.Id.my_image_button);
var myImageView = new ImageViewAsync(this); // this is the context
ImageService.Instance.LoadUrl(this.Source[position].LogoImagePath)
                .Success(() => myImageButton.SetImageDrawable(myImageView.Drawable))
                .Into(myImageView);

嗨,如果您需要任何帮助,请告诉我

于 2018-04-13T16:33:21.343 回答