WinRT - 在控件中显示动画GIF

时间:2013-01-06 14:55:11

标签: c# xaml windows-8 microsoft-metro windows-runtime

我需要在我的地铁应用程序中显示动画GIF,但我找不到任何允许它的控件。 (我尝试了来自玩家框架的ImageMediaElementMediaPlayer

是否有可能以某种方式显示动画GIF?

5 个答案:

答案 0 :(得分:4)

您可以使用.NET Framework中的BitmapDecoder类本机实现此目的。我在我的博客上有一个例子,它展示了如何实现一个能够从ressource gif文件显示动画GIF的AnimationControl。查看:http://www.henrikbrinch.dk/Blog/2013/02/21/Windows-8---GIF-animations--the-RIGHT-way

答案 1 :(得分:3)

我刚刚发布了一个库来播放动画GIF:XamlAnimatedGif。您只需要在标准Image控件上设置附加属性:

<Image gif:AnimationBehavior.SourceUri="/Images/animated.gif" />

(xmlns映射为xmlns:gif="using:XamlAnimatedGif"

适用于WPF,Windows 8.1和Windows Phone 8.1

答案 2 :(得分:1)

这不能原生,但你可以看看

http://imagetools.codeplex.com/

你可以做任何你想做的事。 你也可以看看这个

http://blogs.msdn.com/b/jstegman/archive/2009/09/08/silverlight-3-sample-updates.aspx

包含GIF解码器库

答案 3 :(得分:1)

这里有一个很好的教程如何将gif插入Metro Style App:

http://advertboy.wordpress.com/2012/05/08/animated-gifs-in-xamlc/

但最简单的方法是使用这个项目:

http://imagetools.codeplex.com/

答案 4 :(得分:0)

正如@Filip Skakun所说,WebView方法有效。当然它是“黑客”,但所有这些库和解码在飞行中都很慢,动画闪烁(至少在Windows手机中)。使用WebView,您可以托管具有透明背景的GIF动画。要使用WebView gif呈现方法,请在项目中创建html页面:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>gif rendering</title>
    <script type="text/javascript">
        function SetImageSource(image, source) {
            document.getElementById(image).src = source;
        };
    </script>

<style type="text/css">
    html, body
    {
        -ms-content-zooming:none;
        -ms-overflow-style: none;
        -ms-scroll-translation: none;
        -ms-touch-select: none;
        overflow: hidden;
        zoom: 100%;
    }
</style>
</head>
<body>
<img id="gifPlaceholder" src=""/>

<script>
    SetImageSource("gifPlaceholder", window.top.location.search.substring(1));
</script>
</body>
</html>

CSS非常重要 - 因为它禁用了WebView的缩放/滚动/触摸移动(在大多数情况下这是不可取的)。将GIF动画添加到同一个文件夹(html所在的位置)。 Xaml代码:

<WebView Name="gifRendererWebView" 
         Source="ms-appx-web:///pathToHtmlInProject.html?gifName.gif"
         DefaultBackgroundColor="Transparent"/>

唯一的缺点是你在WebView占据的区域“丢失手势”(你不能使用WebViewBrush,因为你会丢失动画)。