Это похоже на "опечатку" в описании nuget, если вы посмотрите на исходный код от martijn00, он связал собственные библиотеки Lottie iOS и Android (а не веб-версию)
Существует html / js-версия Lottie (lottie-web
), которую вы можете использовать через WebView
Xamarin.Forms на iOS, Android, UWP.
Его действительно легко настроить, и вам не нужны никакие пользовательские пакеты / надстройки. Всего один файл JavaScript (lottie.js
), ваш файл анимации на основе json и несколько простых HTML-файлов.
re: https://github.com/airbnb/lottie-web
Пример использования локальных файлов с lottie-web
Поместите свои файлы в каждый из локальных ресурсов собственного приложения, Активы (AndroidAsset
) для Android, Ресурсы для (BundleResource
) iOS и т. Д.
├── lottie.html
├── lottie.js
└── lottieLogo.json
Примечание: эти файлы должны быть предварительно сжаты / минимизированы для максимальной эффективности загрузки.
Примечание. Вы можете «связать» их из одного источника, поэтому на самом деле у вас не будет нескольких копий в решении.
Lottie.html
<!DOCTYPE html>
<html style="width: 100%;height: 100%">
<head>
<script id="animData" type="application/json">
LottieJsonReplaceMe
</script>
<script>
LottieJavaScriptReplaceMe
</script>
</head>
<body style="background-color:#ccc; margin: 0px;height: 100%;">
<div style="width:100%;height:100%;background-color:#333;" id="lottie"></div>
<script>
var data = JSON.parse(document.getElementById('animData').innerHTML);
console.log("start:");
console.log(data);
console.log("end:");
var animation = bodymovin.loadAnimation({
container: document.getElementById('lottie'),
animationData: data,
renderer: 'svg/canvas/html',
loop: false,
autoplay: true,
name: "StackOverflow",
});
var anim = bodymovin.loadAnimation(animation);
</script>
</body>
</html>
lottie.js
lottieLogo.json
- Ваш файл данных анимации Lottie json
Объединение html, javascript и json в одну строку позволяет избежать защиты XMLHttpRequest / CORS на различных платформах / браузерах при работе с локальными файлами (file://localhost/....
), в противном случае необходимо изменить настройки управления встроенным браузером каждой платформы.
Примечание. Использование Xamarin.Essentials
из библиотеки .NetStd / Forms для получения потока к содержимому приложения, зависящего от платформы, только для чтения, и для местоположения кэша для сохранения комбинированного html (для эффективного многократного использования).
string html;
var htmlCachedFile = Path.Combine(FileSystem.CacheDirectory, "lottie.html");
#if DEBUG
if (File.Exists(htmlCachedFile)) File.Delete(htmlCachedFile);
#endif
if (!File.Exists(htmlCachedFile))
using (var htmlStream = await FileSystem.OpenAppPackageFileAsync("lottie.html"))
using (var jsStream = await FileSystem.OpenAppPackageFileAsync("lottie.js"))
using (var jsonStream = await FileSystem.OpenAppPackageFileAsync("data.json"))
{
var jsonReader = new StreamReader(jsonStream);
var json = jsonReader.ReadToEnd();
var jsReader = new StreamReader(jsStream);
var js = jsReader.ReadToEnd();
var htmlReader = new StreamReader(htmlStream);
var html1 = htmlReader.ReadToEnd();
var html2 = html1.Replace("LottieJavaScriptReplaceMe", js);
html = html2.Replace("LottieJsonReplaceMe", json);
File.WriteAllText(htmlCachedFile, html);
}
else
html = File.ReadAllText(htmlCachedFile);
webView.Source = new HtmlWebViewSource() { Html = html };
Порт Lottie UWP
Существует порт Lottie для C # / UWP, я не использовал его лично, но должна быть возможность добавить средство визуализации пользовательских форм и интегрировать его в оболочку martijn00 Xamarin.Forms Lottie, чтобы добавить поддержку UWP:
https://github.com/azchohfi/LottieUWP
Примечание. Возможно, вы захотите просмотреть проблемы Github для этого порта, поскольку, похоже, не все анимации поддерживаются (?), И есть другие нерешенные проблемы ...
person
SushiHangover
schedule
14.11.2018