FFImageLoading:加载到ImageButton中

时间:2018-04-13 14:28:26

标签: xamarin xamarin.android ffimageloading

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

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

2 个答案:

答案 0 :(得分:2)

AFAIK没有与FFImageLoading一起使用的特定ImageButton,但您可以直接使用ImageViewAsync将其设置为android:clickable="true"并添加点击事件。

如前所述,here ImageButton只是ImageView默认情况下具有非空背景,而ImageButton.onSetAlpha()方法始终返回false,scaleType已设置中心,它总是充满焦点。因此,如果您需要这种行为,可以添加它。

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

除此之外,您还可以添加自定义加载逻辑,如ImageLoaderTask继承的解释here,并将其称为ImageService.Instance.LoadImage(customImageTask)

最后另一种方式(但是hackish和nonformant)将创建一个ImageViewAsync只是为了保存FFImageLoading的结果,并在Success回调中设置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);

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

答案 1 :(得分:1)

不知道这是否相关。我给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是您创建的方法。然后在其中输入您实际希望点击手势执行的逻辑。

您还可以使用命令传递对象。让见面知道这是否有意义