Fresco从文件中播放gif

时间:2018-05-02 14:11:05

标签: android xamarin

我正在使用此代码来显示文件中的简单图像。但是我怎么能玩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'不包含定义。

1 个答案:

答案 0 :(得分:0)

您可以使用:

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(看here)。

并且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,here很简单:

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

我制作了一个demo,用Fresco和Gilde加载gif。