LottieUWP embedded into Xamarin.Forms
up vote
0
down vote
favorite
I made a custom renderer for LottieUWP
[assembly: ExportRenderer(typeof(LottieView), typeof(LottieViewRenderer))]
namespace Gorilla.Forms.UWP.Source.Renderer.Lottie
{
public class LottieViewRenderer : ViewRenderer<LottieView, LottieAnimationView>
{
    private LottieAnimationView AnimationView;
    protected override void OnElementChanged(ElementChangedEventArgs<LottieView> e)
    {
        base.OnElementChanged(e);
        if (Control == null)
        {
            if (e.NewElement == null) return;
            AnimationView = new LottieAnimationView()
            {
                Name = e.NewElement.AnimationPath,
                FileName = e.NewElement.AnimationPath,
                AutoPlay = true,
                RepeatCount = -1
            };
            SetNativeControl(AnimationView);
        }
    }
}
}
And here is the LottieView
public class LottieView : View
{
    public static readonly BindableProperty AnimationPathProperty = BindableProperty.Create(
        propertyName: nameof(AnimationPath),
        returnType: typeof(string),
        declaringType: typeof(LottieView));
    public string AnimationPath
    {
        get => (string)GetValue(AnimationPathProperty);
        set => SetValue(AnimationPathProperty, value);
    }
}
This works, but sometimes when hovering or waiting some seconds, I get an error:
WinRT information: Attempting to close a CanvasActiveLayer that is not top of the stack. The most recently created layer must be closed first.
at System.Runtime.InteropServices.WindowsRuntime.IClosable.Close()
   at System.Runtime.InteropServices.WindowsRuntime.IClosableToIDisposableAdapter.Dispose()
   at LottieUWP.LottieDrawable.Draw(CanvasDevice device, BitmapCanvas bitmapCanvas, CompositionLayer compositionLayer, Rect bounds, Single scale, Byte alpha, Matrix3X3 matrix, Double width, Double height, CanvasDrawingSession canvasDrawingSession)
   at LottieUWP.LottieDrawable.CanvasControlOnDraw(ICanvasAnimatedControl canvasControl, CanvasAnimatedDrawEventArgs args)
   at Windows.ApplicationModel.Core.UnhandledError.Propagate()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
This seems to be a bug inside LottieUWP or is my implementation incorrect?
c# xamarin xamarin.forms xamarin.uwp lottie
add a comment |
up vote
0
down vote
favorite
I made a custom renderer for LottieUWP
[assembly: ExportRenderer(typeof(LottieView), typeof(LottieViewRenderer))]
namespace Gorilla.Forms.UWP.Source.Renderer.Lottie
{
public class LottieViewRenderer : ViewRenderer<LottieView, LottieAnimationView>
{
    private LottieAnimationView AnimationView;
    protected override void OnElementChanged(ElementChangedEventArgs<LottieView> e)
    {
        base.OnElementChanged(e);
        if (Control == null)
        {
            if (e.NewElement == null) return;
            AnimationView = new LottieAnimationView()
            {
                Name = e.NewElement.AnimationPath,
                FileName = e.NewElement.AnimationPath,
                AutoPlay = true,
                RepeatCount = -1
            };
            SetNativeControl(AnimationView);
        }
    }
}
}
And here is the LottieView
public class LottieView : View
{
    public static readonly BindableProperty AnimationPathProperty = BindableProperty.Create(
        propertyName: nameof(AnimationPath),
        returnType: typeof(string),
        declaringType: typeof(LottieView));
    public string AnimationPath
    {
        get => (string)GetValue(AnimationPathProperty);
        set => SetValue(AnimationPathProperty, value);
    }
}
This works, but sometimes when hovering or waiting some seconds, I get an error:
WinRT information: Attempting to close a CanvasActiveLayer that is not top of the stack. The most recently created layer must be closed first.
at System.Runtime.InteropServices.WindowsRuntime.IClosable.Close()
   at System.Runtime.InteropServices.WindowsRuntime.IClosableToIDisposableAdapter.Dispose()
   at LottieUWP.LottieDrawable.Draw(CanvasDevice device, BitmapCanvas bitmapCanvas, CompositionLayer compositionLayer, Rect bounds, Single scale, Byte alpha, Matrix3X3 matrix, Double width, Double height, CanvasDrawingSession canvasDrawingSession)
   at LottieUWP.LottieDrawable.CanvasControlOnDraw(ICanvasAnimatedControl canvasControl, CanvasAnimatedDrawEventArgs args)
   at Windows.ApplicationModel.Core.UnhandledError.Propagate()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
This seems to be a bug inside LottieUWP or is my implementation incorrect?
c# xamarin xamarin.forms xamarin.uwp lottie
It might help to see your LottieView and the AnimationPath. I assume this is a json string? IOW, can you supply a MCVE (minimal, complete, verifiable example? stackoverflow.com/help/mcve
– jgoldberger - MSFT
Nov 21 at 21:39
From the error info,CanvasActiveLayeris not top of the stack, and it will be released, then it cause thecanvasControlparameter empty withinCanvasControlOnDrawmethod. So, you need checkLottieViewclass and how you use it.
– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just aPropertyand aBindablePropertyimplemented
– Daniel DirtyNative Martin
Nov 26 at 8:44
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I made a custom renderer for LottieUWP
[assembly: ExportRenderer(typeof(LottieView), typeof(LottieViewRenderer))]
namespace Gorilla.Forms.UWP.Source.Renderer.Lottie
{
public class LottieViewRenderer : ViewRenderer<LottieView, LottieAnimationView>
{
    private LottieAnimationView AnimationView;
    protected override void OnElementChanged(ElementChangedEventArgs<LottieView> e)
    {
        base.OnElementChanged(e);
        if (Control == null)
        {
            if (e.NewElement == null) return;
            AnimationView = new LottieAnimationView()
            {
                Name = e.NewElement.AnimationPath,
                FileName = e.NewElement.AnimationPath,
                AutoPlay = true,
                RepeatCount = -1
            };
            SetNativeControl(AnimationView);
        }
    }
}
}
And here is the LottieView
public class LottieView : View
{
    public static readonly BindableProperty AnimationPathProperty = BindableProperty.Create(
        propertyName: nameof(AnimationPath),
        returnType: typeof(string),
        declaringType: typeof(LottieView));
    public string AnimationPath
    {
        get => (string)GetValue(AnimationPathProperty);
        set => SetValue(AnimationPathProperty, value);
    }
}
This works, but sometimes when hovering or waiting some seconds, I get an error:
WinRT information: Attempting to close a CanvasActiveLayer that is not top of the stack. The most recently created layer must be closed first.
at System.Runtime.InteropServices.WindowsRuntime.IClosable.Close()
   at System.Runtime.InteropServices.WindowsRuntime.IClosableToIDisposableAdapter.Dispose()
   at LottieUWP.LottieDrawable.Draw(CanvasDevice device, BitmapCanvas bitmapCanvas, CompositionLayer compositionLayer, Rect bounds, Single scale, Byte alpha, Matrix3X3 matrix, Double width, Double height, CanvasDrawingSession canvasDrawingSession)
   at LottieUWP.LottieDrawable.CanvasControlOnDraw(ICanvasAnimatedControl canvasControl, CanvasAnimatedDrawEventArgs args)
   at Windows.ApplicationModel.Core.UnhandledError.Propagate()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
This seems to be a bug inside LottieUWP or is my implementation incorrect?
c# xamarin xamarin.forms xamarin.uwp lottie
I made a custom renderer for LottieUWP
[assembly: ExportRenderer(typeof(LottieView), typeof(LottieViewRenderer))]
namespace Gorilla.Forms.UWP.Source.Renderer.Lottie
{
public class LottieViewRenderer : ViewRenderer<LottieView, LottieAnimationView>
{
    private LottieAnimationView AnimationView;
    protected override void OnElementChanged(ElementChangedEventArgs<LottieView> e)
    {
        base.OnElementChanged(e);
        if (Control == null)
        {
            if (e.NewElement == null) return;
            AnimationView = new LottieAnimationView()
            {
                Name = e.NewElement.AnimationPath,
                FileName = e.NewElement.AnimationPath,
                AutoPlay = true,
                RepeatCount = -1
            };
            SetNativeControl(AnimationView);
        }
    }
}
}
And here is the LottieView
public class LottieView : View
{
    public static readonly BindableProperty AnimationPathProperty = BindableProperty.Create(
        propertyName: nameof(AnimationPath),
        returnType: typeof(string),
        declaringType: typeof(LottieView));
    public string AnimationPath
    {
        get => (string)GetValue(AnimationPathProperty);
        set => SetValue(AnimationPathProperty, value);
    }
}
This works, but sometimes when hovering or waiting some seconds, I get an error:
WinRT information: Attempting to close a CanvasActiveLayer that is not top of the stack. The most recently created layer must be closed first.
at System.Runtime.InteropServices.WindowsRuntime.IClosable.Close()
   at System.Runtime.InteropServices.WindowsRuntime.IClosableToIDisposableAdapter.Dispose()
   at LottieUWP.LottieDrawable.Draw(CanvasDevice device, BitmapCanvas bitmapCanvas, CompositionLayer compositionLayer, Rect bounds, Single scale, Byte alpha, Matrix3X3 matrix, Double width, Double height, CanvasDrawingSession canvasDrawingSession)
   at LottieUWP.LottieDrawable.CanvasControlOnDraw(ICanvasAnimatedControl canvasControl, CanvasAnimatedDrawEventArgs args)
   at Windows.ApplicationModel.Core.UnhandledError.Propagate()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object sender, UnhandledErrorDetectedEventArgs eventArgs)
This seems to be a bug inside LottieUWP or is my implementation incorrect?
c# xamarin xamarin.forms xamarin.uwp lottie
c# xamarin xamarin.forms xamarin.uwp lottie
edited Nov 26 at 8:43
asked Nov 21 at 12:29
Daniel DirtyNative Martin
488315
488315
It might help to see your LottieView and the AnimationPath. I assume this is a json string? IOW, can you supply a MCVE (minimal, complete, verifiable example? stackoverflow.com/help/mcve
– jgoldberger - MSFT
Nov 21 at 21:39
From the error info,CanvasActiveLayeris not top of the stack, and it will be released, then it cause thecanvasControlparameter empty withinCanvasControlOnDrawmethod. So, you need checkLottieViewclass and how you use it.
– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just aPropertyand aBindablePropertyimplemented
– Daniel DirtyNative Martin
Nov 26 at 8:44
add a comment |
It might help to see your LottieView and the AnimationPath. I assume this is a json string? IOW, can you supply a MCVE (minimal, complete, verifiable example? stackoverflow.com/help/mcve
– jgoldberger - MSFT
Nov 21 at 21:39
From the error info,CanvasActiveLayeris not top of the stack, and it will be released, then it cause thecanvasControlparameter empty withinCanvasControlOnDrawmethod. So, you need checkLottieViewclass and how you use it.
– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just aPropertyand aBindablePropertyimplemented
– Daniel DirtyNative Martin
Nov 26 at 8:44
It might help to see your LottieView and the AnimationPath. I assume this is a json string? IOW, can you supply a MCVE (minimal, complete, verifiable example? stackoverflow.com/help/mcve
– jgoldberger - MSFT
Nov 21 at 21:39
It might help to see your LottieView and the AnimationPath. I assume this is a json string? IOW, can you supply a MCVE (minimal, complete, verifiable example? stackoverflow.com/help/mcve
– jgoldberger - MSFT
Nov 21 at 21:39
From the error info,
CanvasActiveLayer is not top of the stack, and it will be  released,  then it cause  the canvasControl parameter empty within  CanvasControlOnDraw method. So, you need check LottieView class and how you use it.– Nico Zhu - MSFT
Nov 22 at 6:37
From the error info,
CanvasActiveLayer is not top of the stack, and it will be  released,  then it cause  the canvasControl parameter empty within  CanvasControlOnDraw method. So, you need check LottieView class and how you use it.– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just a
Property and a BindableProperty implemented– Daniel DirtyNative Martin
Nov 26 at 8:44
LottieView is my selfmade class and there is just a
Property and a BindableProperty implemented– Daniel DirtyNative Martin
Nov 26 at 8:44
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
 
But avoid …
- Asking for help, clarification, or responding to other answers.
 - Making statements based on opinion; back them up with references or personal experience.
 
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
 
But avoid …
- Asking for help, clarification, or responding to other answers.
 - Making statements based on opinion; back them up with references or personal experience.
 
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412067%2flottieuwp-embedded-into-xamarin-forms%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
It might help to see your LottieView and the AnimationPath. I assume this is a json string? IOW, can you supply a MCVE (minimal, complete, verifiable example? stackoverflow.com/help/mcve
– jgoldberger - MSFT
Nov 21 at 21:39
From the error info,
CanvasActiveLayeris not top of the stack, and it will be released, then it cause thecanvasControlparameter empty withinCanvasControlOnDrawmethod. So, you need checkLottieViewclass and how you use it.– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just a
Propertyand aBindablePropertyimplemented– Daniel DirtyNative Martin
Nov 26 at 8:44