代码之家  ›  专栏  ›  技术社区  ›  PerrierCitror

FFImageLoading:加载到ImageButton

  •  3
  • PerrierCitror  · 技术社区  · 8 年前

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

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

    2 回复  |  直到 8 年前
        1
  •  5
  •   Carodice    8 年前

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

    首先参考FFImageLoading。Svg。xaml中的表单

    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;
    

    Wait ExecuteYourCommandAsync是您创建的一个方法。在那里,你会把你的逻辑放在你真正想要的轻敲手势上。

    也可以使用命令通过对象。让met知道这是否合理

        2
  •  2
  •   fmaccaroni    8 年前

    哎呀,没什么特别的 ImageButton 用于FFImageLoading,但可以直接使用 ImageViewAsync 将其设置为 android:clickable="true" 并添加click事件。

    如前所述 here 一 图片按钮 只是一个 ImageView 默认情况下具有非空背景,还有ImageButton。onSetAlpha()方法始终返回false,scaleType设置为中心,并且始终膨胀为可聚焦。因此,如果你需要这种行为,你可以添加它。

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

    相反,您还可以添加自定义加载逻辑,如所述 here 继承自 ImageLoaderTask 并这样称呼它 ImageService.Instance.LoadImage(customImageTask)

    最后,另一种方法(但有点刻薄和无性能)是创建 ImageViewAsync 只需保存FFImageLoading的结果,并在成功回调上在 图片按钮 :

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

    嗨,如果你需要帮助,请告诉我