Lottie AnimationView在iOS中不起作用,但在Android c#中起作用

时间:2019-01-27 09:25:20

标签: c# xamarin.forms xamarin.ios lottie-xamarin

尝试在Android上播放动画时,动画会正确显示并播放,但是,在iOS上,动画不会显示。 调用element.IsPlaying时,返回值为true。

Lottie已在android和iOS实施中正确配置,文件位于android和ios的资产和根项目文件夹中,并且设置了正确的构建操作。

最近3个小时,我一直在寻找无济于事的答案,并寻求帮助。

代码:

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();
    }
}

2 个答案:

答案 0 :(得分:0)

经过调查,我确定大多数动画是从使用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);
    }
}

答案 1 :(得分:0)

将您的AnimationView放在自定义控件/ ContentView中,然后以这种方式使用它。带有XAML的容器将使其按预期工作。