无法在Xamarin.Forms(便携式)中播放GIF图像

时间:2017-02-06 14:16:18

标签: android xamarin xamarin.ios xamarin.forms animated-gif

我正在尝试使用Xamarin.Forms(Portable)项目播放GIF图像。我使用以下代码实现但无法播放GIF,我没有看到静态图像。

  

此代码中没有错误或崩溃,但我无法看到   GIF图片。

代码中有什么问题吗?

接口:

public interface IGif
{
   string Get();
}

iOS实施:

[assembly: Dependency(typeof(GifView_iOS))]
namespace Project.iOS
{
 public class GifView_iOS : IGif
 {
   public string Get()
   {
     return NSBundle.MainBundle.BundlePath;
   }
 }
}

Android实施:

[assembly: Dependency(typeof(GifView_Droid))]
namespace Project.Droid
{
 public class GifView_Droid : IGif
 {
   public string Get()
   {
     return "file:///android_asset/";
   }
 }
}

GIF图片类:

public class Gif: WebView
{
    public string GifSource
    {
    set
    {
        string imgSource = DependencyService.Get<IGif>.Get() + value; 
        var html = new HtmlWebViewSource();
        html.Html = String.Format
            (@"<html><body style='background: #000000;'><img src='{0}' /></body></html>",
             imgSource);
        SetValue(SourceProperty, html);
    }
  }
}

最后,我已添加到StackLayout。

Gif gifimage = new Gif();
gifimage.GifSource = "loading.gif";
StackGif.Children.Add(gifimage);
  

我还没有在iPhone上测试过这段代码,也许它在iPhone上运行。

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

默认情况下,StackLayout占用整个可用空间,但WebView不占用。 而只是

Gif gifimage = new Gif();

使用

public WebViewProgrammaticallyPage()
        {
            var StackGif = new StackLayout()
            {
                BackgroundColor=Color.Red,
            };
            Gif gifimage = new Gif()
            {
                WidthRequest = 120,
                HorizontalOptions = LayoutOptions.CenterAndExpand,
                HeightRequest = 80,
                VerticalOptions = LayoutOptions.CenterAndExpand,
            };
            gifimage.GifSource = "icon1.png";
            StackGif.Children.Add(gifimage);

            Content = StackGif;
        }

enter image description here

WebView的透明度是另一个问题。您应该使用自定义渲染器 https://forums.xamarin.com/discussion/34957/creating-a-webview-with-a-transparent-background

答案 1 :(得分:0)

这是一个愚蠢的错误,我必须在Web视图和GIF类中给出Image的大小。

这是更新的代码。

我的GIF课程:

public class Gif: WebView
{
    public string GifSource
    {
        set
        {
            string imgSource = DependencyService.Get<Dependency.IGif>().Get() + value;
            var html = new HtmlWebViewSource();
            html.Html = String.Format(@"<html><body><img src='{0}'  style='width: 100px; height: 100px;' /></body></html>", imgSource);
            SetValue(SourceProperty, html);
        }
    }
}

和ContentPage中的初始化:

Helpers.Controls.Gif gifImage = new Helpers.Controls.Gif();
gifImage.GifSource = "loading.gif";
gifImage.HorizontalOptions = LayoutOptions.Center;
gifImage.VerticalOptions = LayoutOptions.FillAndExpand;
gifImage.HeightRequest = 120;
gifImage.BackgroundColor = Color.Transparent;
GridLoad.Children.Add(gifImage);
  

注意:我仍在研究背景部分,因为它看起来像   附图,我想在网页视图中使用透明背景。

图像:enter image description here