首页 > 解决方案 > Fresco 从文件中播放 gif

问题描述

我正在使用此代码仅显示文件中的简单图像。但是我怎么能玩gif呢?

var CatalogMain = System.IO.Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString(), "NewFolder");

SimpleDraweeView MainImage = FindViewById<SimpleDraweeView>(Resource.Id.MainImageView);
Android.Net.Uri imageUri = Android.Net.Uri.FromFile(new Java.IO.File(CatalogMain, "Main.gif"));// For files on device
MainImage.SetImageURI(imageUri);

我也找到了这段代码,但我遇到了几个错误。我不知道如何将其转换为与 xamarin 一起玩。

Uri uri;
DraweeController controller = Fresco.NewDraweeControllerBuilder()
                                    .SetUri(imageUri)
                                    .setAutoPlayAnimations(true)
                                    .build();
mSimpleDraweeView.setController(controller);

我收到以下错误

错误 CS0246 找不到类型或命名空间名称“DraweeController”。

错误 CS0103 当前不存在名称“mSimpleDraweeView”。

错误 CS1061 'ISimpleDraweeControllerBuilder' 不包含定义。

标签: androidxamarin

解决方案


你可以使用这个:

Uri uri = Uri.Parse("http://img.huofar.com/data/jiankangrenwu/shizi.gif");

PipelineDraweeControllerBuilder pdcb= (PipelineDraweeControllerBuilder) Fresco.NewDraweeControllerBuilder()
                                               .SetAutoPlayAnimations(true);
IDraweeController draweeController = pdcb.SetUri(Uri.Parse("res://" + PackageName + "/" + Resource.Drawable.test)).Build();

SimpleDraweeView img = FindViewById<SimpleDraweeView>(Resource.Id.img);
img.Controller = draweeController;

但是,这只能加载图片,无法播放gif。因为Fresco需要com.facebook.fresco:animated-gif:1.9.0支持 gif(看这里)。

并且NAXAM/fresco-android-binding没有绑定com.facebook.fresco:animated-gif:1.9.0在他们的 nuget 中。在 Package Manager Console 上执行后Install-Package Naxam.Fresco.Droid,您将在项目中添加五个包,它们是:

  • Naxam.Fresco.Droid
  • Naxam.FrescoCore.Droid
  • Naxam.FrescoDrawee.Droid
  • Naxam.FrescoImagePipeline.Droid
  • Naxam.FrescoImagePipelineBase.Droid.

但是没有animated-gif

所以,我建议你使用glide来加载 gif,这里简单说一下:

var CatalogMain = System.IO.Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString(), "dbsoft");
Glide.With(this).AsGif().Load(new File(CatalogMain, "Main.gif")).Into(MainImage);

我做了一个演示,它使用 Fresco 和 Gilde 加载 gif。


推荐阅读