如何在Xamarin表单中使用FFImageLoading快速加载图片gif?

时间:2018-10-09 14:02:56

标签: c# .net xamarin xamarin.forms

我的Gif图片大小为2 MB。我使用Xamarin Forms的库FFImageLoading进行加载。但是时间负载超过7秒。 如何快速加载gif图片?

我当前正在使用路径图片:

<ffimageloading:SvgCachedImage HorizontalOptions="Center" VerticalOptions="Center" Aspect="AspectFill" x:Name="Gif" Source="{Binding image}" Margin="0"/>

Gif图片的名称是:

image = "GifImage.gif"

用户迫不及待想加载图片gif。 因此,请支持我如何在Xamarin Forms上快速加载gif图像。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用WebView加载快速的Gif图像。 使用WebView不需要设置任何库。 我用它代替了库FFImageLoading。 它创建一个.html包含Gif图像,因此加载速度非常快。 您可以在以下位置参考使用它: WebView Gif Viewer

答案 1 :(得分:0)

在Xamarin表单上使用WebView:

在文件.xaml上添加源:

            <WebView HorizontalOptions="Center"
                 VerticalOptions="Center"
                 HeightRequest="{Binding HeightImage}"
                 WidthRequest="{Binding WidthImage}"
                 Source="{Binding LinkImageGif}" />

在文件.cs上添加源:

            int imageHeight = HeightImage;
            int imageWidth = WidthImage;

            var source = new HtmlWebViewSource
            {
                Html = $"<body\"><img src=\"{_srcImage}\" alt=\"A Gif file\" width=\"{imageWidth}\" height=\"{imageHeight}\" style=\"width: 100%; height: auto;\"/></body>",
                BaseUrl = DependencyService.Get<IBaseUrl>().Get()
            };

因为BaseUrl的Android和iOS有所不同。因此,使用Share Project,创建一个依存关系。

首先,创建一个Interface

namespace abcxyz
{
    public interface IBaseUrl { string Get(); }
}

在Android上,添加代码:

[assembly: Dependency(typeof(BaseUrlAndroid))]
namespace abcxyz
{
    public class BaseUrlAndroid : IBaseUrl
    {
        public string Get() => "file:///android_asset/";
    }
}

(Gif图片将添加到以下文件夹中:AndroidResource的资产)

在iOS上,添加代码:

[assembly: Dependency(typeof(BaseUrlOniOs))]
namespace abcxyz
{
    public class BaseUrlOniOs : IBaseUrl
    {
        public string Get()
        {
            return NSBundle.MainBundle.BundlePath;
        }
    }
}

(Gif图片将添加到iOS的文件夹:ResourceBundleResource))