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,CanvasActiveLayer
is not top of the stack, and it will be released, then it cause thecanvasControl
parameter empty withinCanvasControlOnDraw
method. So, you need checkLottieView
class and how you use it.
– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just aProperty
and aBindableProperty
implemented
– 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,CanvasActiveLayer
is not top of the stack, and it will be released, then it cause thecanvasControl
parameter empty withinCanvasControlOnDraw
method. So, you need checkLottieView
class and how you use it.
– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just aProperty
and aBindableProperty
implemented
– 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,CanvasActiveLayer
is not top of the stack, and it will be released, then it cause thecanvasControl
parameter empty withinCanvasControlOnDraw
method. So, you need checkLottieView
class and how you use it.
– Nico Zhu - MSFT
Nov 22 at 6:37
LottieView is my selfmade class and there is just aProperty
and aBindableProperty
implemented
– 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,
CanvasActiveLayer
is not top of the stack, and it will be released, then it cause thecanvasControl
parameter empty withinCanvasControlOnDraw
method. So, you need checkLottieView
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 aBindableProperty
implemented– Daniel DirtyNative Martin
Nov 26 at 8:44