Lottie AnimationView 在 iOS 中不工作,但在 Android 中工作 c# 实现
Lottie AnimationView Not working in iOS but is working in Android c# Implementation
尝试在 Android 上播放动画时,动画显示并正确播放,但是,在 iOS 上,动画不显示。
调用 element.IsPlaying
时,我们得到 return 值为 true。
Lottie 已在 Android 和 iOS 实现中正确配置,文件位于 Android 和 iOS 的资产和根项目文件夹中以及正确的构建操作已设置。
代码:
public class xxx : ContentPage {
AnimationView element = new AnimationView();
public xxx()
{
element = new AnimationView() {
Loop = true,
AutoPlay = true,
Animation = "splashyloader.json",
WidthRequest = 400,
HeightRequest = 400,
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
IsVisible = true,
Speed=1
};
}
protected override void OnAppearing(){
element.Animation = "splashyloader.json";
element.Play();
}
}
经过调查,我发现大多数动画都是从使用 XAML 构造的 AnimationView 播放的。 Brad Dixon 建议使用 XAML 创建一个 ContentView 并为 Lottie Animation 构建一个自定义视图,然后可以毫无问题地以编程方式调用它。
一旦实施的初步测试表明它可以工作,进一步的测试表明我尝试使用的主要 Lottie JSON 动画文件将无法在 iOS 上工作(表明可能存在损坏)。
这似乎可行,但实际上并不是最佳设置。希望 Lottie 的未来版本能够使它过时。
AnimatingView.xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="FoodMono.Views.AnimatingView" xmlns:forms="clr-namespace:Lottie.Forms;assembly=Lottie.Forms">
<ContentView.Content>
<forms:AnimationView x:Name="animation" Loop="True" AutoPlay="True" HeightRequest="300" WidthRequest="300" Speed="1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Animation="5stars.json" />
</ContentView.Content>
</ContentView>
AnimatingView.xaml.cs
public partial class AnimatingView : ContentView
{
string animationName = null;
public AnimatingView(string AnimationName, bool loop=true, bool autostart=true)
{
InitializeComponent();
animationName = AnimationName;
animation.Animation = AnimationName;
if(!loop)
animation.Loop = loop;
if(!autostart)
animation.AutoPlay = autostart;
}
protected override void OnParentSet()
{
Console.WriteLine(animation.IsPlaying);
this.Start();
Console.WriteLine(animation.IsPlaying);
base.OnParentSet();
}
public void Start()
{
animation.Play();
}
public void Stop()
{
animation.AbortAnimation(animationName);
}
}
将您的 AnimationView 放入自定义 control/ContentView 中并以这种方式使用它。带有 XAML 的容器将使其按预期工作。
尝试在 Android 上播放动画时,动画显示并正确播放,但是,在 iOS 上,动画不显示。
调用 element.IsPlaying
时,我们得到 return 值为 true。
Lottie 已在 Android 和 iOS 实现中正确配置,文件位于 Android 和 iOS 的资产和根项目文件夹中以及正确的构建操作已设置。
代码:
public class xxx : ContentPage {
AnimationView element = new AnimationView();
public xxx()
{
element = new AnimationView() {
Loop = true,
AutoPlay = true,
Animation = "splashyloader.json",
WidthRequest = 400,
HeightRequest = 400,
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
IsVisible = true,
Speed=1
};
}
protected override void OnAppearing(){
element.Animation = "splashyloader.json";
element.Play();
}
}
经过调查,我发现大多数动画都是从使用 XAML 构造的 AnimationView 播放的。 Brad Dixon 建议使用 XAML 创建一个 ContentView 并为 Lottie Animation 构建一个自定义视图,然后可以毫无问题地以编程方式调用它。
一旦实施的初步测试表明它可以工作,进一步的测试表明我尝试使用的主要 Lottie JSON 动画文件将无法在 iOS 上工作(表明可能存在损坏)。
这似乎可行,但实际上并不是最佳设置。希望 Lottie 的未来版本能够使它过时。
AnimatingView.xaml
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="FoodMono.Views.AnimatingView" xmlns:forms="clr-namespace:Lottie.Forms;assembly=Lottie.Forms">
<ContentView.Content>
<forms:AnimationView x:Name="animation" Loop="True" AutoPlay="True" HeightRequest="300" WidthRequest="300" Speed="1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Animation="5stars.json" />
</ContentView.Content>
</ContentView>
AnimatingView.xaml.cs
public partial class AnimatingView : ContentView
{
string animationName = null;
public AnimatingView(string AnimationName, bool loop=true, bool autostart=true)
{
InitializeComponent();
animationName = AnimationName;
animation.Animation = AnimationName;
if(!loop)
animation.Loop = loop;
if(!autostart)
animation.AutoPlay = autostart;
}
protected override void OnParentSet()
{
Console.WriteLine(animation.IsPlaying);
this.Start();
Console.WriteLine(animation.IsPlaying);
base.OnParentSet();
}
public void Start()
{
animation.Play();
}
public void Stop()
{
animation.AbortAnimation(animationName);
}
}
将您的 AnimationView 放入自定义 control/ContentView 中并以这种方式使用它。带有 XAML 的容器将使其按预期工作。