我正在尝试使用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上运行。
提前谢谢你。
答案 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;
}
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);
注意:我仍在研究背景部分,因为它看起来像 附图,我想在网页视图中使用透明背景。