As @Filip Skakun powiedział, że działa metoda WebView
. Pewnie, że to "hack", ale wszystkie te biblioteki i dekodowanie w locie jest wolne, animacja migocze (przynajmniej w telefonie Windows). Korzystanie z WebView daje możliwość hostowania animowanych gifów z przezroczystym tłem. Aby korzystać Webview podejście renderowania gif stworzyć stronę HTML w projekcie:
<!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 jest ważne - ponieważ wyłącza zoom/przewijanie/dotykowy ruch WebView (co nie jest pożądane w większości przypadków). Dodaj animowane gify do tego samego folderu (gdzie siedzi HTML). Kod XAML:
<WebView Name="gifRendererWebView"
Source="ms-appx-web:///pathToHtmlInProject.html?gifName.gif"
DefaultBackgroundColor="Transparent"/>
Jedyną wadą jest to, że „stracić gesty” na obszarze, który WebView
zajmować (i nie można używać WebViewBrush
bo tracisz animacji).
To zadziałało :) Najpierw wykrywam wymiary gifu, a następnie ustawiam wysokość i szerokość odsłon do wartości dodanej za pomocą 20, aby uniknąć przewijania pasków. Następnie wystarczy ustawić źródło widoku internetowego na gif i działa :) – Jesse
Rozważ przejście na WebViewBrush. To powinno dać ci lepszą wydajność –