├── .editorconfig ├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── a-regression.md │ ├── b-bug-report.md │ ├── c-feature-request.md │ ├── d-enhancement-proposal.md │ └── e-question.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Directory.Build.props ├── Directory.Build.targets ├── LICENSE ├── Lottie.Android ├── Additions │ ├── AboutAdditions.txt │ ├── LottieAnimationView.cs │ └── LottieComposition.cs ├── Jars │ ├── AboutJars.txt │ └── lottie-4.2.2.aar ├── JavaDocs │ └── lottie-4.2.2-sources.jar ├── Lottie.Android.csproj ├── Resources │ └── Resource.Designer.cs ├── Transforms │ ├── EnumFields.xml │ ├── EnumMethods.xml │ └── Metadata.xml └── readme.txt ├── Lottie.Forms ├── AnimationSource.cs ├── AnimationView.cs ├── AnimationViewExtensions.cs ├── ILottieComposition.cs ├── Lottie.Forms.csproj ├── LottieExtensions.cs ├── Platforms │ ├── Android │ │ ├── AnimationViewExtensions.cs │ │ ├── AnimationViewRenderer.cs │ │ ├── AnimatorListener.cs │ │ ├── AnimatorUpdateListener.cs │ │ ├── ClickListener.cs │ │ ├── LottieAndroidComposition.cs │ │ ├── LottieFailureListener.cs │ │ └── LottieOnCompositionLoadedListener.cs │ ├── Ios │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ ├── Mac │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ ├── Tizen │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ ├── Uap │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ └── Wpf │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs ├── RenderMode.cs ├── RepeatMode.cs └── readme.txt ├── Lottie.Maui ├── AnimationSource.cs ├── AnimationView.cs ├── AnimationViewExtensions.cs ├── ILottieComposition.cs ├── Lottie.Maui.csproj ├── LottieExtensions.cs ├── Platforms │ ├── Android │ │ ├── AnimationViewExtensions.cs │ │ ├── AnimationViewRenderer.cs │ │ ├── AnimatorListener.cs │ │ ├── AnimatorUpdateListener.cs │ │ ├── ClickListener.cs │ │ ├── LottieAndroidComposition.cs │ │ ├── LottieFailureListener.cs │ │ └── LottieOnCompositionLoadedListener.cs │ ├── Ios │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ ├── Mac │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ ├── Tizen │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ ├── Uap │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs │ └── Wpf │ │ ├── AnimationViewExtensions.cs │ │ └── AnimationViewRenderer.cs ├── RenderMode.cs ├── RepeatMode.cs └── readme.txt ├── Lottie.iOS ├── ApiDefinitions.Ios.cs ├── ApiDefinitions.Mac.cs ├── LOTAnimationView.cs ├── Linker.cs ├── Lottie.framework.linkwith.cs ├── Lottie.iOS.csproj ├── StructsAndEnums.cs ├── libLottie-ios.a ├── libLottie-ios.linkwith.cs ├── libLottie-macos.a ├── libLottie-macos.linkwith.cs ├── libLottie-tvos.a ├── libLottie-tvos.linkwith.cs └── readme.txt ├── Lottie.sln ├── README.md ├── Samples ├── Directory.Build.props ├── Forms │ ├── Example.Forms.Droid │ │ ├── Assets │ │ │ ├── AboutAssets.txt │ │ │ └── LottieLogo1.json │ │ ├── Example.Forms.Droid.csproj │ │ ├── MainActivity.cs │ │ ├── Properties │ │ │ └── AndroidManifest.xml │ │ └── Resources │ │ │ ├── AboutResources.txt │ │ │ ├── drawable-hdpi │ │ │ └── icon.png │ │ │ ├── drawable-xhdpi │ │ │ └── icon.png │ │ │ ├── drawable-xxhdpi │ │ │ └── icon.png │ │ │ ├── drawable │ │ │ └── icon.png │ │ │ ├── layout │ │ │ ├── Tabbar.axml │ │ │ └── Toolbar.axml │ │ │ └── values │ │ │ └── styles.xml │ ├── Example.Forms.Mac │ │ ├── AppDelegate.cs │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── AppIcon-128.png │ │ │ │ ├── AppIcon-128@2x.png │ │ │ │ ├── AppIcon-16.png │ │ │ │ ├── AppIcon-16@2x.png │ │ │ │ ├── AppIcon-256.png │ │ │ │ ├── AppIcon-256@2x.png │ │ │ │ ├── AppIcon-32.png │ │ │ │ ├── AppIcon-32@2x.png │ │ │ │ ├── AppIcon-512.png │ │ │ │ ├── AppIcon-512@2x.png │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Entitlements.plist │ │ ├── Example.Forms.Mac.csproj │ │ ├── Info.plist │ │ ├── LottieLogo1.json │ │ ├── Main.cs │ │ ├── Main.storyboard │ │ ├── ViewController.cs │ │ └── ViewController.designer.cs │ ├── Example.Forms.Tizen │ │ ├── Example.Forms.Tizen.csproj │ │ ├── Main.cs │ │ ├── res │ │ │ └── LottieLogo1.json │ │ ├── shared │ │ │ └── res │ │ │ │ ├── Example.Forms.Tizen.png │ │ │ │ └── LottieLogo1.json │ │ └── tizen-manifest.xml │ ├── Example.Forms.UWP │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── Assets │ │ │ ├── LockScreenLogo.scale-200.png │ │ │ ├── LottieLogo1.json │ │ │ ├── SplashScreen.scale-200.png │ │ │ ├── Square150x150Logo.scale-200.png │ │ │ ├── Square44x44Logo.scale-200.png │ │ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png │ │ │ ├── StoreLogo.png │ │ │ └── Wide310x150Logo.scale-200.png │ │ ├── Example.Forms.UWP.csproj │ │ ├── MainPage.xaml │ │ ├── MainPage.xaml.cs │ │ ├── Package.appxmanifest │ │ └── Properties │ │ │ └── Default.rd.xml │ ├── Example.Forms.iOS │ │ ├── AppDelegate.cs │ │ ├── Entitlements.plist │ │ ├── Example.Forms.iOS.csproj │ │ ├── Info.plist │ │ ├── LottieLogo1.json │ │ ├── Main.cs │ │ ├── Resources │ │ │ ├── Default-568h@2x.png │ │ │ ├── Default-Portrait.png │ │ │ ├── Default-Portrait@2x.png │ │ │ ├── Default.png │ │ │ ├── Default@2x.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── Icon-Small-40.png │ │ │ ├── Icon-Small-40@2x.png │ │ │ ├── Icon-Small-40@3x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ └── LaunchScreen.storyboard │ │ ├── iTunesArtwork │ │ └── iTunesArtwork@2x │ └── Example.Forms │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── Example.Forms.csproj │ │ ├── LottieLogo1.json │ │ ├── Pages │ │ ├── AssetPage.xaml │ │ ├── AssetPage.xaml.cs │ │ ├── ControlsPage.xaml │ │ ├── ControlsPage.xaml.cs │ │ ├── EmbeddedPage.xaml │ │ ├── EmbeddedPage.xaml.cs │ │ ├── MainPage.xaml │ │ ├── MainPage.xaml.cs │ │ ├── StreamPage.xaml │ │ ├── StreamPage.xaml.cs │ │ ├── UrlPage.xaml │ │ └── UrlPage.xaml.cs │ │ └── ViewModels │ │ ├── AssetViewModel.cs │ │ ├── BaseViewModel.cs │ │ ├── ControlsViewModel.cs │ │ ├── EmbeddedViewModel.cs │ │ ├── MainViewModel.cs │ │ ├── StreamViewModel.cs │ │ └── UrlViewModel.cs ├── Maui │ └── Lottie.Sample │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AppShell.xaml │ │ ├── AppShell.xaml.cs │ │ ├── Lottie.Sample.csproj │ │ ├── MainPage.xaml │ │ ├── MainPage.xaml.cs │ │ ├── MauiProgram.cs │ │ ├── Platforms │ │ ├── Android │ │ │ ├── AndroidManifest.xml │ │ │ ├── MainActivity.cs │ │ │ ├── MainApplication.cs │ │ │ └── Resources │ │ │ │ └── values │ │ │ │ └── colors.xml │ │ ├── MacCatalyst │ │ │ ├── AppDelegate.cs │ │ │ ├── Info.plist │ │ │ └── Program.cs │ │ ├── Tizen │ │ │ ├── Main.cs │ │ │ └── tizen-manifest.xml │ │ ├── Windows │ │ │ ├── App.xaml │ │ │ ├── App.xaml.cs │ │ │ ├── Package.appxmanifest │ │ │ └── app.manifest │ │ └── iOS │ │ │ ├── AppDelegate.cs │ │ │ ├── Info.plist │ │ │ └── Program.cs │ │ └── Resources │ │ ├── AppIcon │ │ ├── appicon.svg │ │ └── appiconfg.svg │ │ ├── Fonts │ │ ├── OpenSans-Regular.ttf │ │ └── OpenSans-Semibold.ttf │ │ ├── Images │ │ └── dotnet_bot.svg │ │ ├── Raw │ │ └── AboutAssets.txt │ │ ├── Splash │ │ └── splash.svg │ │ └── Styles │ │ ├── Colors.xaml │ │ └── Styles.xaml └── Native │ ├── Example.Droid │ ├── AnimationFragment.cs │ ├── AssetUtils.cs │ ├── Assets │ │ ├── 9squares-AlBoardman.json │ │ ├── Belo Foggy.json │ │ ├── City.json │ │ ├── Dash.json │ │ ├── EmptyState.json │ │ ├── HamburgerArrow.json │ │ ├── Hello World.json │ │ ├── Images │ │ │ └── WeAccept │ │ │ │ └── img_0.png │ │ ├── JesseIntro.json │ │ ├── Logo │ │ │ └── LogoSmall.json │ │ ├── LottieLogo1.json │ │ ├── LottieLogo2.json │ │ ├── Mobilo │ │ │ ├── A.json │ │ │ ├── Apostrophe.json │ │ │ ├── B.json │ │ │ ├── BlinkingCursor.json │ │ │ ├── C.json │ │ │ ├── Colon.json │ │ │ ├── Comma.json │ │ │ ├── D.json │ │ │ ├── E.json │ │ │ ├── F.json │ │ │ ├── G.json │ │ │ ├── H.json │ │ │ ├── I.json │ │ │ ├── J.json │ │ │ ├── K.json │ │ │ ├── L.json │ │ │ ├── M.json │ │ │ ├── N.json │ │ │ ├── O.json │ │ │ ├── P.json │ │ │ ├── Q.json │ │ │ ├── R.json │ │ │ ├── S.json │ │ │ ├── T.json │ │ │ ├── U.json │ │ │ ├── V.json │ │ │ ├── W.json │ │ │ ├── X.json │ │ │ ├── Y.json │ │ │ └── Z.json │ │ ├── MotionCorpse-Jrcanest.json │ │ ├── Name.json │ │ ├── PinJump.json │ │ ├── Tests │ │ │ ├── Alarm.json │ │ │ ├── AllSet.json │ │ │ ├── CheckSwitch.json │ │ │ ├── City.json │ │ │ ├── EllipseTrimPath.json │ │ │ ├── Hosts.json │ │ │ ├── Image.json │ │ │ ├── Laugh4.json │ │ │ ├── LightBulb.json │ │ │ ├── LoopPlayOnce.json │ │ │ ├── MaskInv.json │ │ │ ├── Mask_26.json │ │ │ ├── MatteInv.json │ │ │ ├── MatteParentPrecomp.json │ │ │ ├── Polygon.json │ │ │ ├── Polystar.json │ │ │ ├── PreCompMadness.json │ │ │ ├── SplitDimensions.json │ │ │ ├── Star.json │ │ │ ├── TrimPathFill.json │ │ │ └── TrimPathsFull.json │ │ ├── TwitterHeart.json │ │ ├── Walkthrough │ │ │ ├── FullScreen.json │ │ │ └── Walkthrough.json │ │ ├── WeAccept.json │ │ ├── fonts │ │ │ ├── Comic Neue.ttf │ │ │ ├── Helvetica Neue.ttf │ │ │ ├── Helvetica.ttf │ │ │ ├── Open Sans.ttf │ │ │ ├── PT Serif.ttf │ │ │ └── Roboto.ttf │ │ ├── lottiefiles.com - ATM.json │ │ ├── lottiefiles.com - Animated Graph.json │ │ ├── lottiefiles.com - Beating Heart.json │ │ ├── lottiefiles.com - Camera.json │ │ ├── lottiefiles.com - Countdown.json │ │ ├── lottiefiles.com - Emoji Shock.json │ │ ├── lottiefiles.com - Emoji Tongue.json │ │ ├── lottiefiles.com - Emoji Wink.json │ │ ├── lottiefiles.com - Favorite Star.json │ │ ├── lottiefiles.com - Gears.json │ │ ├── lottiefiles.com - Loading 1.json │ │ ├── lottiefiles.com - Loading 2.json │ │ ├── lottiefiles.com - Loading 3.json │ │ ├── lottiefiles.com - Loading 4.json │ │ ├── lottiefiles.com - Mail Sent.json │ │ ├── lottiefiles.com - Octopus.json │ │ ├── lottiefiles.com - Play and Like It.json │ │ ├── lottiefiles.com - Postcard.json │ │ ├── lottiefiles.com - Preloader.json │ │ ├── lottiefiles.com - Progress Success.json │ │ ├── lottiefiles.com - Retweet.json │ │ ├── lottiefiles.com - Star Wars Rey.json │ │ ├── lottiefiles.com - Tadah Image.json │ │ ├── lottiefiles.com - Tadah Video.json │ │ ├── lottiefiles.com - Touch ID.json │ │ └── lottiefiles.com - Video Camera.json │ ├── ChooseAssetDialogFragment.cs │ ├── Example.Droid.csproj │ ├── FontActivity.cs │ ├── ListFragment.cs │ ├── LottieFontViewGroup.cs │ ├── MainActivity.cs │ ├── Properties │ │ └── AndroidManifest.xml │ ├── Resources │ │ ├── anim │ │ │ ├── hold.xml │ │ │ ├── slide_in_right.xml │ │ │ └── slide_out_right.xml │ │ ├── drawable-anydpi-v21 │ │ │ ├── ic_assets.xml │ │ │ ├── ic_file.xml │ │ │ ├── ic_network.xml │ │ │ └── ic_qr_scan.xml │ │ ├── drawable-hdpi │ │ │ ├── ic_assets.png │ │ │ ├── ic_file.png │ │ │ ├── ic_network.png │ │ │ └── ic_qr_scan.png │ │ ├── drawable-mdpi │ │ │ ├── ic_assets.png │ │ │ ├── ic_file.png │ │ │ ├── ic_network.png │ │ │ └── ic_qr_scan.png │ │ ├── drawable-nodpi │ │ │ └── bubble.9.png │ │ ├── drawable-xhdpi │ │ │ ├── ic_assets.png │ │ │ ├── ic_file.png │ │ │ ├── ic_network.png │ │ │ └── ic_qr_scan.png │ │ ├── drawable-xxhdpi │ │ │ ├── ic_assets.png │ │ │ ├── ic_file.png │ │ │ ├── ic_network.png │ │ │ └── ic_qr_scan.png │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_assets.png │ │ │ ├── ic_file.png │ │ │ ├── ic_network.png │ │ │ └── ic_qr_scan.png │ │ ├── drawable │ │ │ ├── ic_back.xml │ │ │ ├── ic_invert.xml │ │ │ ├── ic_invert_black.xml │ │ │ ├── ic_invert_white.xml │ │ │ ├── ic_loop.xml │ │ │ ├── ic_loop_disabled.xml │ │ │ ├── ic_loop_enabled.xml │ │ │ ├── ic_pause.xml │ │ │ ├── ic_play.xml │ │ │ ├── ic_play_pause.xml │ │ │ ├── ic_qr_overlay.xml │ │ │ ├── ic_restart.xml │ │ │ ├── ic_view.xml │ │ │ ├── inverted_background.xml │ │ │ ├── outline.xml │ │ │ ├── outline_inverted.xml │ │ │ ├── outline_normal.xml │ │ │ └── play_button_background.xml │ │ ├── layout │ │ │ ├── activity_font.xml │ │ │ ├── activity_main.xml │ │ │ ├── app_intro_animation_view.xml │ │ │ ├── fragment_animation.xml │ │ │ ├── fragment_choose_asset.xml │ │ │ ├── fragment_empty.xml │ │ │ ├── fragment_list.xml │ │ │ ├── fragment_view_animation.xml │ │ │ ├── pager_item_app_intro.xml │ │ │ ├── view_holder_file.xml │ │ │ ├── view_holder_grid_item.xml │ │ │ └── view_holder_letter.xml │ │ ├── menu │ │ │ └── fragment_animation.xml │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ └── StringViewHolder.cs │ ├── Example.iOS │ ├── Animation Explorer │ │ ├── AnimationExplorerViewController.cs │ │ ├── AnimationExplorerViewController.designer.cs │ │ ├── JSONExplorerViewController.cs │ │ └── JSONExplorerViewController.designer.cs │ ├── AppDelegate.cs │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x-1.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x-1.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x-1.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ └── Contents.json │ ├── Entitlements.plist │ ├── Example.iOS.csproj │ ├── Info.plist │ ├── LAControlsViewController.cs │ ├── LAControlsViewController.designer.cs │ ├── LaunchScreen.storyboard │ ├── LottieRootViewController.cs │ ├── LottieRootViewController.designer.cs │ ├── Main.cs │ ├── Main.storyboard │ ├── Resources │ │ ├── 9squares-AlBoardman.json │ │ ├── HamburgerArrow.json │ │ ├── IconTransitions.json │ │ ├── LottieLogo1.json │ │ ├── LottieLogo1_masked.json │ │ ├── LottieLogo2.json │ │ ├── MotionCorpse-Jrcanest.json │ │ ├── PinJump.json │ │ ├── Switch.json │ │ ├── Switch_States.json │ │ ├── TwitterHeart.json │ │ ├── TypeFace │ │ │ ├── A.json │ │ │ ├── Apostrophe.json │ │ │ ├── B.json │ │ │ ├── BlinkingCursor.json │ │ │ ├── C.json │ │ │ ├── Colon.json │ │ │ ├── Comma.json │ │ │ ├── D.json │ │ │ ├── E.json │ │ │ ├── F.json │ │ │ ├── G.json │ │ │ ├── H.json │ │ │ ├── I.json │ │ │ ├── J.json │ │ │ ├── K.json │ │ │ ├── L.json │ │ │ ├── M.json │ │ │ ├── N.json │ │ │ ├── O.json │ │ │ ├── P.json │ │ │ ├── Q.json │ │ │ ├── R.json │ │ │ ├── S.json │ │ │ ├── T.json │ │ │ ├── U.json │ │ │ ├── V.json │ │ │ ├── W.json │ │ │ ├── X.json │ │ │ ├── Y.json │ │ │ └── Z.json │ │ ├── Watermelon.json │ │ ├── lottie_logo.png │ │ ├── vcTransition1.json │ │ └── vcTransition2.json │ ├── Transition Demo │ │ ├── AnimationTransitionViewController.cs │ │ ├── AnimationTransitionViewController.designer.cs │ │ └── ToAnimationViewController.cs │ └── Typing Animation Demo │ │ ├── AnimatedTextField.cs │ │ ├── LOTCharacterCell.cs │ │ ├── TypingDemoViewController.cs │ │ └── TypingDemoViewController.designer.cs │ ├── Example.macOS │ ├── AppDelegate.cs │ ├── AppDelegate.designer.cs │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon128@1x.png │ │ │ ├── Icon128@2x.png │ │ │ ├── Icon16@1x.png │ │ │ ├── Icon16@2x.png │ │ │ ├── Icon256@1x.png │ │ │ ├── Icon256@2x.png │ │ │ ├── Icon32@1x.png │ │ │ ├── Icon32@2x.png │ │ │ ├── Icon512@1x.png │ │ │ └── Icon512@2x.png │ ├── EditMenuDelegate.cs │ ├── Entitlements.plist │ ├── Example.macOS.csproj │ ├── Info.plist │ ├── LAMainView.cs │ ├── LAMainView.designer.cs │ ├── LottieFilesUrl.cs │ ├── Main.cs │ ├── Main.storyboard │ ├── Resources │ │ └── LottieLogo1.json │ ├── ViewController.cs │ └── ViewController.designer.cs │ └── Example.tvOS │ ├── AppDelegate.cs │ ├── Assets.xcassets │ ├── App Icon & Top Shelf Image.brandassets │ │ ├── App Icon - Large.imagestack │ │ │ ├── Back.imagestacklayer │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Front.imagestacklayer │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ └── Middle.imagestacklayer │ │ │ │ ├── Content.imageset │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ ├── App Icon - Small.imagestack │ │ │ ├── Back.imagestacklayer │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Front.imagestacklayer │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ └── Middle.imagestacklayer │ │ │ │ ├── Content.imageset │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Top Shelf Image Wide.imageset │ │ │ └── Contents.json │ │ └── Top Shelf Image.imageset │ │ │ └── Contents.json │ ├── Contents.json │ └── LaunchImages.launchimage │ │ └── Contents.json │ ├── Entitlements.plist │ ├── Example.tvOS.csproj │ ├── Info.plist │ ├── Main.cs │ ├── Main.storyboard │ ├── Resources │ └── LottieLogo1.json │ ├── ViewController.cs │ └── ViewController.designer.cs ├── global.json └── icon.png /.gitattributes: -------------------------------------------------------------------------------- 1 | # This file is understood by git 1.7.2+. 2 | 3 | # Windows specific files should always be crlf on checkout 4 | *.bat text eol=crlf 5 | *.cmd text eol=crlf 6 | *.ps1 text eol=crlf 7 | 8 | # Check out the following as ln always for osx/linux/cygwin 9 | *.sh text eol=lf 10 | 11 | # Opt in the following types to always normalize line endings 12 | # on checkin and always use native endings on checkout. 13 | *.config text 14 | *.cs text diff=csharp 15 | *.csproj text 16 | *.md text 17 | *.msbuild text 18 | *.nuspec text 19 | *.pp text 20 | *.ps1 text 21 | *.sln text 22 | *.tt text 23 | *.txt text 24 | *.xaml text 25 | *.xml text 26 | 27 | # Binary files 28 | *.bmp binary 29 | *.jpeg binary 30 | *.jpg binary 31 | *.nupkg binary 32 | *.png binary 33 | *.sdf binary 34 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: Baseflow 2 | custom: https://baseflow.com/contact 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/a-regression.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | name: 🔙 Regression 4 | about: Report unexpected behavior that worked previously 5 | --- 6 | 7 | ## 🔙 Regression 8 | 9 | 10 | 11 | ### Old (and correct) behavior 12 | 13 | ### Current behavior 14 | 15 | ### Reproduction steps 16 | 17 | ### Configuration 18 | 19 | **Version:** 1.x 20 | 21 | **Platform:** 22 | - [ ] :iphone: iOS 23 | - [ ] :robot: Android 24 | - [ ] :checkered_flag: WPF 25 | - [ ] :earth_americas: UWP 26 | - [ ] :apple: MacOS 27 | - [ ] :tv: tvOS 28 | - [ ] :monkey: Xamarin.Forms 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/b-bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | name: 🐛 Bug Report 4 | about: Create a report to help us fix bugs and make improvements 5 | --- 6 | 7 | ## 🐛 Bug Report 8 | 9 | 10 | 11 | ### Expected behavior 12 | 13 | ### Reproduction steps 14 | 15 | ### Configuration 16 | 17 | **Version:** 1.x 18 | 19 | **Platform:** 20 | - [ ] :iphone: iOS 21 | - [ ] :robot: Android 22 | - [ ] :checkered_flag: WPF 23 | - [ ] :earth_americas: UWP 24 | - [ ] :apple: MacOS 25 | - [ ] :tv: tvOS 26 | - [ ] :monkey: Xamarin.Forms 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/c-feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | name: 🚀 Feature Request 4 | about: Want to see something new included in the Framework? Submit it! 5 | --- 6 | 7 | ## 🚀 Feature Requests 8 | 9 | 10 | 11 | ### Contextualize the feature 12 | 13 | 14 | ### Describe the feature 15 | 16 | 17 | ### Platforms affected (mark all that apply) 18 | - [ ] :iphone: iOS 19 | - [ ] :robot: Android 20 | - [ ] :checkered_flag: WPF 21 | - [ ] :earth_americas: UWP 22 | - [ ] :apple: MacOS 23 | - [ ] :tv: tvOS 24 | - [ ] :monkey: Xamarin.Forms 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/d-enhancement-proposal.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | name: 🏗 Enhancement Proposal 4 | about: Proposals for code cleanup, refactor and improvements in general 5 | --- 6 | 7 | ## 🏗 Enhancement Proposal 8 | 9 | 10 | 11 | ### Pitch 12 | 13 | 14 | 15 | ### Platforms affected (mark all that apply) 16 | - [ ] :iphone: iOS 17 | - [ ] :robot: Android 18 | - [ ] :checkered_flag: WPF 19 | - [ ] :earth_americas: UWP 20 | - [ ] :apple: MacOS 21 | - [ ] :tv: tvOS 22 | - [ ] :monkey: Xamarin.Forms 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/e-question.md: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | name: 💬 Questions and Help 4 | about: If you have questions, please use this for support 5 | --- 6 | 7 | ## 💬 Questions and Help 8 | 9 | For questions or help we recommend checking: 10 | 11 | - The [Lottie tag in Stack Overflow](https://stackoverflow.com/questions/tagged/lottie) 12 | - The [General slack channel in the Xamarin Slack](https://xamarinchat.herokuapp.com/) 13 | - Ask your question in the [Xamarin Forums](https://forums.xamarin.com/) -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### :sparkles: What kind of change does this PR introduce? (Bug fix, feature, docs update...) 2 | 3 | 4 | ### :arrow_heading_down: What is the current behavior? 5 | 6 | 7 | ### :new: What is the new behavior (if this is a feature change)? 8 | 9 | 10 | ### :boom: Does this PR introduce a breaking change? 11 | 12 | 13 | ### :bug: Recommendations for testing 14 | 15 | 16 | ### :memo: Links to relevant issues/docs 17 | 18 | 19 | ### :thinking: Checklist before submitting 20 | 21 | - [ ] All projects build 22 | - [ ] Follows style guide lines 23 | - [ ] Relevant documentation was updated 24 | - [ ] Rebased onto current develop 25 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Lottie 2 | 3 | ## Finding an issue to work on 4 | 5 | If you'd like to work on something that isn't in a current issue, especially if it would be a big change, please open a new issue for discussion! 6 | 7 | ## Setting up a development environment 8 | 9 | First, you'll need git to fork and clone the repo. [GitHub has help pages about setting 10 | up git](https://help.github.com/articles/set-up-git/), and once you've done 11 | that, you should be able to clone the repo and change into the repo's directory 12 | from your terminal: 13 | 14 | ``` 15 | git clone https://github.com/{YourFork}/LottieXamarin.git 16 | ``` 17 | 18 | If you are using SourceTree or another kind of visual git application, enter the url to your fork in the add new repository field. 19 | 20 | After you are done pull the develop branch, and open `Lottie.sln` in Visual Studio to get started. 21 | -------------------------------------------------------------------------------- /Lottie.Android/Additions/AboutAdditions.txt: -------------------------------------------------------------------------------- 1 | Additions allow you to add arbitrary C# to the generated classes 2 | before they are compiled. This can be helpful for providing convenience 3 | methods or adding pure C# classes. 4 | 5 | == Adding Methods to Generated Classes == 6 | 7 | Let's say the library being bound has a Rectangle class with a constructor 8 | that takes an x and y position, and a width and length size. It will look like 9 | this: 10 | 11 | public partial class Rectangle 12 | { 13 | public Rectangle (int x, int y, int width, int height) 14 | { 15 | // JNI bindings 16 | } 17 | } 18 | 19 | Imagine we want to add a constructor to this class that takes a Point and 20 | Size structure instead of 4 ints. We can add a new file called Rectangle.cs 21 | with a partial class containing our new method: 22 | 23 | public partial class Rectangle 24 | { 25 | public Rectangle (Point location, Size size) : 26 | this (location.X, location.Y, size.Width, size.Height) 27 | { 28 | } 29 | } 30 | 31 | At compile time, the additions class will be added to the generated class 32 | and the final assembly will a Rectangle class with both constructors. 33 | 34 | 35 | == Adding C# Classes == 36 | 37 | Another thing that can be done is adding fully C# managed classes to the 38 | generated library. In the above example, let's assume that there isn't a 39 | Point class available in Java or our library. The one we create doesn't need 40 | to interact with Java, so we'll create it like a normal class in C#. 41 | 42 | By adding a Point.cs file with this class, it will end up in the binding library: 43 | 44 | public class Point 45 | { 46 | public int X { get; set; } 47 | public int Y { get; set; } 48 | } 49 | -------------------------------------------------------------------------------- /Lottie.Android/Additions/LottieAnimationView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Android.Graphics; 3 | 4 | namespace Com.Airbnb.Lottie 5 | { 6 | public partial class LottieAnimationView 7 | { 8 | /// 9 | /// Delegate to handle the loading of bitmaps that are not packaged in the assets of your app. 10 | /// 11 | public void SetImageAssetDelegate(Func funcAssetLoad) 12 | { 13 | this.SetImageAssetDelegate(new ImageAssetDelegateImpl(funcAssetLoad)); 14 | } 15 | 16 | internal sealed class ImageAssetDelegateImpl : Java.Lang.Object, IImageAssetDelegate 17 | { 18 | private readonly Func funcAssetLoad; 19 | 20 | public ImageAssetDelegateImpl(Func funcAssetLoad) 21 | { 22 | this.funcAssetLoad = funcAssetLoad; 23 | } 24 | 25 | public Bitmap FetchBitmap(LottieImageAsset asset) 26 | { 27 | return this.funcAssetLoad(asset); 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Lottie.Android/Jars/AboutJars.txt: -------------------------------------------------------------------------------- 1 | This directory is for Android .jars. 2 | 3 | There are 4 types of jars that are supported: 4 | 5 | == Input Jar and Embedded Jar == 6 | 7 | This is the jar that bindings should be generated for. 8 | 9 | For example, if you were binding the Google Maps library, this would 10 | be Google's "maps.jar". 11 | 12 | The difference between EmbeddedJar and InputJar is, EmbeddedJar is to be 13 | embedded in the resulting dll as EmbeddedResource, while InputJar is not. 14 | There are couple of reasons you wouldn't like to embed the target jar 15 | in your dll (the ones that could be internally loaded by 16 | feature e.g. maps.jar, or you cannot embed jars that are under some 17 | proprietary license). 18 | 19 | Set the build action for these jars in the properties page to "InputJar". 20 | 21 | 22 | == Reference Jar and Embedded Reference Jar == 23 | 24 | These are jars that are referenced by the input jar. C# bindings will 25 | not be created for these jars. These jars will be used to resolve 26 | types used by the input jar. 27 | 28 | NOTE: Do not add "android.jar" as a reference jar. It will be added automatically 29 | based on the Target Framework selected. 30 | 31 | Set the build action for these jars in the properties page to "ReferenceJar". 32 | 33 | "EmbeddedJar" works like "ReferenceJar", but like "EmbeddedJar", it is 34 | embedded in your dll. But at application build time, they are not included 35 | in the final apk, like ReferenceJar files. 36 | 37 | -------------------------------------------------------------------------------- /Lottie.Android/Jars/lottie-4.2.2.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Lottie.Android/Jars/lottie-4.2.2.aar -------------------------------------------------------------------------------- /Lottie.Android/JavaDocs/lottie-4.2.2-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Lottie.Android/JavaDocs/lottie-4.2.2-sources.jar -------------------------------------------------------------------------------- /Lottie.Android/Lottie.Android.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | monoandroid12.0;net6.0-android 4 | Lottie.Android 5 | Lottie.Android 6 | Render After Effects animations natively on Android, iOS, MacOS, TVOs and UWP 7 | Com.Airbnb.Android.Lottie 8 | false 9 | 4.2.3 10 | 11 | XAJavaInterop1 12 | <_EnableInterfaceMembers>true 13 | true 14 | d8 15 | r8 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /Lottie.Android/Resources/Resource.Designer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Lottie.Additions 4 | { 5 | public partial class Resource 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Lottie.Android/Transforms/EnumFields.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 19 | 20 | -------------------------------------------------------------------------------- /Lottie.Android/Transforms/EnumMethods.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 19 | 20 | -------------------------------------------------------------------------------- /Lottie.Android/readme.txt: -------------------------------------------------------------------------------- 1 | --------------------------------- 2 | Lottie 3 | --------------------------------- 4 | 5 | Lottie is a mobile library for Android and iOS that parses Adobe After Effects animations exported as json with Bodymovin and renders them natively on mobile! 6 | 7 | Using Lottie on Xamarin.Android: 8 | 9 | 16 | 17 | --------------------------------- 18 | Star on Github if this project helps you: https://github.com/Baseflow/LottieXamarin 19 | 20 | Commercial support is available. Integration with your app or services, samples, feature request, etc. Email: hello@baseflow.com 21 | Powered by: https://baseflow.com 22 | --------------------------------- -------------------------------------------------------------------------------- /Lottie.Forms/AnimationSource.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public enum AnimationSource 4 | { 5 | /// 6 | /// Use when Lottie should load the json file from Asset or Bundle folder. 7 | /// The Animation input should be a string containing the file name 8 | /// 9 | AssetOrBundle, 10 | 11 | /// 12 | /// Url should point to a json file containing the Lottie animation on a remote resource 13 | /// 14 | Url, 15 | 16 | /// 17 | /// Use when passing in json directly as a string 18 | /// 19 | Json, 20 | 21 | /// 22 | /// Stream the Lottie animation to the view 23 | /// 24 | Stream, 25 | 26 | /// 27 | /// When loading from an EmbeddedResource which is compiled into an Assembly 28 | /// Either set the file name as string to make Lottie read from the calling Assembly 29 | /// Or use the syntax "resource://LottieLogo1.json?assembly=Example.Forms" 30 | /// 31 | EmbeddedResource 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Lottie.Forms/ILottieComposition.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public interface ILottieComposition : IDisposable 4 | { 5 | //TODO: Implement native per platform 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Lottie.Forms/LottieExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | 3 | namespace Lottie.Forms 4 | { 5 | public static class LottieExtensions 6 | { 7 | public static void ExecuteCommandIfPossible(this ICommand command, object parameter = null) 8 | { 9 | if (command?.CanExecute(parameter) == true) 10 | { 11 | command.Execute(parameter); 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Lottie.Forms/Platforms/Android/AnimatorUpdateListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Animation; 2 | using Android.Runtime; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class AnimatorUpdateListener : Java.Lang.Object, ValueAnimator.IAnimatorUpdateListener 7 | { 8 | public AnimatorUpdateListener() 9 | { 10 | } 11 | 12 | public AnimatorUpdateListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 13 | { 14 | } 15 | 16 | public Action OnAnimationUpdateImpl { get; set; } 17 | 18 | public void OnAnimationUpdate(ValueAnimator animation) 19 | { 20 | if (animation == null) 21 | throw new ArgumentNullException(nameof(animation)); 22 | 23 | OnAnimationUpdateImpl?.Invoke(((float)animation.AnimatedValue)); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Lottie.Forms/Platforms/Android/ClickListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Runtime; 2 | using static Android.Views.View; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class ClickListener : Java.Lang.Object, IOnClickListener 7 | { 8 | public ClickListener() 9 | { 10 | } 11 | 12 | public ClickListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 13 | { 14 | } 15 | 16 | public Action OnClickImpl { get; set; } 17 | 18 | public void OnClick(global::Android.Views.View v) 19 | { 20 | OnClickImpl?.Invoke(); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Lottie.Forms/Platforms/Android/LottieAndroidComposition.cs: -------------------------------------------------------------------------------- 1 | using Com.Airbnb.Lottie; 2 | 3 | namespace Lottie.Forms.Platforms.Android 4 | { 5 | public class LottieAndroidComposition : LottieComposition, ILottieComposition 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Lottie.Forms/Platforms/Android/LottieFailureListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Runtime; 2 | using Com.Airbnb.Lottie; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class LottieFailureListener : Java.Lang.Object, ILottieListener 7 | { 8 | public LottieFailureListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 9 | { 10 | } 11 | 12 | public LottieFailureListener() 13 | { 14 | } 15 | 16 | public Action OnResultImpl { get; set; } 17 | 18 | public void OnResult(Java.Lang.Object p0) 19 | { 20 | var javaError = p0?.ToString(); 21 | OnResultImpl?.Invoke(new Exception(javaError)); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Lottie.Forms/Platforms/Android/LottieOnCompositionLoadedListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Runtime; 2 | using Com.Airbnb.Lottie; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class LottieOnCompositionLoadedListener : Java.Lang.Object, ILottieOnCompositionLoadedListener 7 | { 8 | public LottieOnCompositionLoadedListener() 9 | { 10 | } 11 | 12 | public LottieOnCompositionLoadedListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 13 | { 14 | } 15 | 16 | public Action OnCompositionLoadedImpl { get; set; } 17 | 18 | public void OnCompositionLoaded(LottieComposition p0) 19 | { 20 | OnCompositionLoadedImpl?.Invoke(p0); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Lottie.Forms/RenderMode.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public enum RenderMode 4 | { 5 | Automatic, 6 | Hardware, 7 | Software 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Lottie.Forms/RepeatMode.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public enum RepeatMode 4 | { 5 | /// 6 | /// When the animation reaches the end and RepeatCount is Infinite or a positive value, the animation restarts from the beginning. 7 | /// 8 | Restart = 0, 9 | 10 | /// 11 | /// When the animation reaches the end and RepeatCount is Infinite or a positive value, the animation reverses direction on every iteration. 12 | /// 13 | Reverse = 1, 14 | 15 | /// 16 | /// Repeat the animation indefinitely. 17 | /// 18 | Infinite = 2 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Lottie.Maui/AnimationSource.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public enum AnimationSource 4 | { 5 | /// 6 | /// Use when Lottie should load the json file from Asset or Bundle folder. 7 | /// The Animation input should be a string containing the file name 8 | /// 9 | AssetOrBundle, 10 | 11 | /// 12 | /// Url should point to a json file containing the Lottie animation on a remote resource 13 | /// 14 | Url, 15 | 16 | /// 17 | /// Use when passing in json directly as a string 18 | /// 19 | Json, 20 | 21 | /// 22 | /// Stream the Lottie animation to the view 23 | /// 24 | Stream, 25 | 26 | /// 27 | /// When loading from an EmbeddedResource which is compiled into an Assembly 28 | /// Either set the file name as string to make Lottie read from the calling Assembly 29 | /// Or use the syntax "resource://LottieLogo1.json?assembly=Example.Forms" 30 | /// 31 | EmbeddedResource 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Lottie.Maui/ILottieComposition.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public interface ILottieComposition : IDisposable 4 | { 5 | //TODO: Implement native per platform 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Lottie.Maui/LottieExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | 3 | namespace Lottie.Forms 4 | { 5 | public static class LottieExtensions 6 | { 7 | public static void ExecuteCommandIfPossible(this ICommand command, object parameter = null) 8 | { 9 | if (command?.CanExecute(parameter) == true) 10 | { 11 | command.Execute(parameter); 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Lottie.Maui/Platforms/Android/AnimatorUpdateListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Animation; 2 | using Android.Runtime; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class AnimatorUpdateListener : Java.Lang.Object, ValueAnimator.IAnimatorUpdateListener 7 | { 8 | public AnimatorUpdateListener() 9 | { 10 | } 11 | 12 | public AnimatorUpdateListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 13 | { 14 | } 15 | 16 | public Action OnAnimationUpdateImpl { get; set; } 17 | 18 | public void OnAnimationUpdate(ValueAnimator animation) 19 | { 20 | if (animation == null) 21 | throw new ArgumentNullException(nameof(animation)); 22 | 23 | OnAnimationUpdateImpl?.Invoke(((float)animation.AnimatedValue)); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Lottie.Maui/Platforms/Android/ClickListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Runtime; 2 | using static Android.Views.View; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class ClickListener : Java.Lang.Object, IOnClickListener 7 | { 8 | public ClickListener() 9 | { 10 | } 11 | 12 | public ClickListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 13 | { 14 | } 15 | 16 | public Action OnClickImpl { get; set; } 17 | 18 | public void OnClick(global::Android.Views.View v) 19 | { 20 | OnClickImpl?.Invoke(); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Lottie.Maui/Platforms/Android/LottieAndroidComposition.cs: -------------------------------------------------------------------------------- 1 | using Com.Airbnb.Lottie; 2 | 3 | namespace Lottie.Forms.Platforms.Android 4 | { 5 | public class LottieAndroidComposition : LottieComposition, ILottieComposition 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Lottie.Maui/Platforms/Android/LottieFailureListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Runtime; 2 | using Com.Airbnb.Lottie; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class LottieFailureListener : Java.Lang.Object, ILottieListener 7 | { 8 | public LottieFailureListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 9 | { 10 | } 11 | 12 | public LottieFailureListener() 13 | { 14 | } 15 | 16 | public Action OnResultImpl { get; set; } 17 | 18 | public void OnResult(Java.Lang.Object p0) 19 | { 20 | var javaError = p0?.ToString(); 21 | OnResultImpl?.Invoke(new Exception(javaError)); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Lottie.Maui/Platforms/Android/LottieOnCompositionLoadedListener.cs: -------------------------------------------------------------------------------- 1 | using Android.Runtime; 2 | using Com.Airbnb.Lottie; 3 | 4 | namespace Lottie.Forms.Platforms.Android 5 | { 6 | public class LottieOnCompositionLoadedListener : Java.Lang.Object, ILottieOnCompositionLoadedListener 7 | { 8 | public LottieOnCompositionLoadedListener() 9 | { 10 | } 11 | 12 | public LottieOnCompositionLoadedListener(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) 13 | { 14 | } 15 | 16 | public Action OnCompositionLoadedImpl { get; set; } 17 | 18 | public void OnCompositionLoaded(LottieComposition p0) 19 | { 20 | OnCompositionLoadedImpl?.Invoke(p0); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Lottie.Maui/RenderMode.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public enum RenderMode 4 | { 5 | Automatic, 6 | Hardware, 7 | Software 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Lottie.Maui/RepeatMode.cs: -------------------------------------------------------------------------------- 1 | namespace Lottie.Forms 2 | { 3 | public enum RepeatMode 4 | { 5 | /// 6 | /// When the animation reaches the end and RepeatCount is Infinite or a positive value, the animation restarts from the beginning. 7 | /// 8 | Restart = 0, 9 | 10 | /// 11 | /// When the animation reaches the end and RepeatCount is Infinite or a positive value, the animation reverses direction on every iteration. 12 | /// 13 | Reverse = 1, 14 | 15 | /// 16 | /// Repeat the animation indefinitely. 17 | /// 18 | Infinite = 2 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Lottie.iOS/LOTAnimationView.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using Foundation; 4 | 5 | namespace Airbnb.Lottie 6 | { 7 | public partial class LOTAnimationView 8 | {/* 9 | /// 10 | /// Asynchronously play the animation. 11 | /// 12 | public async Task PlayAsync() 13 | { 14 | var tcs = new TaskCompletionSource(); 15 | 16 | this.CompletionBlock = animationFinished => tcs.SetResult(true); 17 | 18 | this.Play(); 19 | 20 | return await tcs.Task; 21 | } 22 | 23 | /// 24 | /// Plays the animation from its current position to a specific progress. 25 | /// The animation will start from its current position. 26 | /// 27 | public Task PlayToProgressAsync(nfloat toProgress) 28 | { 29 | var tcs = new TaskCompletionSource(); 30 | 31 | this.PlayToProgress(toProgress, (bool animationFinished) => tcs.SetResult(animationFinished)); 32 | 33 | return tcs.Task; 34 | } 35 | 36 | public Task PlayFromProgressAsync(nfloat fromStartProgress, nfloat toEndProgress) 37 | { 38 | var tcs = new TaskCompletionSource(); 39 | 40 | this.PlayFromProgress(fromStartProgress, toEndProgress, (bool animationFinished) => tcs.SetResult(animationFinished)); 41 | 42 | return tcs.Task; 43 | } 44 | 45 | public Task PlayToFrameAsync(NSNumber toFrame) 46 | { 47 | var tcs = new TaskCompletionSource(); 48 | 49 | this.PlayToFrame(toFrame, (bool animationFinished) => tcs.SetResult(animationFinished)); 50 | 51 | return tcs.Task; 52 | } 53 | 54 | public Task PlayFromFrameAsync(NSNumber fromStartFrame, NSNumber toEndFrame) 55 | { 56 | var tcs = new TaskCompletionSource(); 57 | 58 | this.PlayFromFrame(fromStartFrame, toEndFrame, (bool animationFinished) => tcs.SetResult(animationFinished)); 59 | 60 | return tcs.Task; 61 | } 62 | */ 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Lottie.iOS/Linker.cs: -------------------------------------------------------------------------------- 1 |  2 | 3 | namespace DreamTeam.Xamarin.lottie_ios 4 | { 5 | public static class ___DreamTeam_Xamarin_lottie_ios 6 | { 7 | static ___DreamTeam_Xamarin_lottie_ios() 8 | { 9 | DontLooseMeDuringBuild(); 10 | } 11 | 12 | public static void DontLooseMeDuringBuild() 13 | { 14 | 15 | } 16 | } 17 | } 18 | 19 | namespace ApiDefinitions 20 | { 21 | partial class Messaging 22 | { 23 | static Messaging() 24 | { 25 | DreamTeam.Xamarin.lottie_ios.___DreamTeam_Xamarin_lottie_ios.DontLooseMeDuringBuild(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Lottie.iOS/Lottie.framework.linkwith.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | [assembly: LinkWith ("Lottie.framework", LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Simulator | LinkTarget.Arm64 | LinkTarget.Simulator64, 3 | Frameworks = "UIKit CoreGraphics Foundation QuartzCore", 4 | //IsCxx = true, 5 | SmartLink = true, 6 | LinkerFlags="-ObjC", 7 | ForceLoad = true)] 8 | -------------------------------------------------------------------------------- /Lottie.iOS/StructsAndEnums.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using ObjCRuntime; 3 | 4 | namespace Airbnb.Lottie 5 | { 6 | [Native] 7 | public enum LOTViewContentMode : ulong 8 | { 9 | ScaleToFill, 10 | ScaleAspectFit, 11 | ScaleAspectFill, 12 | Redraw, 13 | Center, 14 | Top, 15 | Bottom, 16 | Left, 17 | Right, 18 | TopLeft, 19 | TopRight, 20 | BottomLeft, 21 | BottomRight 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Lottie.iOS/libLottie-ios.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Lottie.iOS/libLottie-ios.a -------------------------------------------------------------------------------- /Lottie.iOS/libLottie-ios.linkwith.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | [assembly: LinkWith("libLottie-ios.a", 3 | Frameworks = "UIKit", 4 | IsCxx = true, 5 | SmartLink = true, 6 | LinkerFlags = "-ObjC", 7 | ForceLoad = true)] 8 | -------------------------------------------------------------------------------- /Lottie.iOS/libLottie-macos.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Lottie.iOS/libLottie-macos.a -------------------------------------------------------------------------------- /Lottie.iOS/libLottie-macos.linkwith.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | 3 | [assembly: LinkWith ("libLottie-macos.a", 4 | Frameworks = "AppKit", 5 | IsCxx = true, 6 | SmartLink = true, 7 | LinkerFlags="-ObjC", 8 | ForceLoad = true)] 9 | -------------------------------------------------------------------------------- /Lottie.iOS/libLottie-tvos.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Lottie.iOS/libLottie-tvos.a -------------------------------------------------------------------------------- /Lottie.iOS/libLottie-tvos.linkwith.cs: -------------------------------------------------------------------------------- 1 | using ObjCRuntime; 2 | [assembly: LinkWith ("libLottie-tvos.a", 3 | Frameworks = "UIKit", 4 | IsCxx = true, 5 | SmartLink = true, 6 | LinkerFlags="-ObjC", 7 | ForceLoad = true)] 8 | -------------------------------------------------------------------------------- /Lottie.iOS/readme.txt: -------------------------------------------------------------------------------- 1 | --------------------------------- 2 | Lottie 3 | --------------------------------- 4 | 5 | Lottie is a mobile library for Android and iOS that parses Adobe After Effects animations exported as json with Bodymovin and renders them natively on mobile! 6 | 7 | Using Lottie on Xamarin.iOS: 8 | 9 | LOTAnimationView animation = LOTAnimationView.AnimationNamed("LottieLogo1"); 10 | this.View.AddSubview(animation); 11 | animation.PlayWithCompletion((animationFinished) => { 12 | // Do Something 13 | }); 14 | 15 | //You can also use the awaitable version 16 | var animationFinished = await animation.PlayAsync(); 17 | 18 | --------------------------------- 19 | Star on Github if this project helps you: https://github.com/Baseflow/LottieXamarin 20 | 21 | Commercial support is available. Integration with your app or services, samples, feature request, etc. Email: hello@baseflow.com 22 | Powered by: https://baseflow.com 23 | --------------------------------- -------------------------------------------------------------------------------- /Samples/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | Copyright (c) Baseflow 4 | Martijn van Dijk, Baseflow 5 | martijn00, Baseflow 6 | $(AssemblyName) ($(TargetFramework)) 7 | en 8 | 9 | 11.0 10 | $(NoWarn);1591;1701;1702;1705;VSX1000 11 | 12 | AnyCPU 13 | full 14 | 15 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with you package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); 20 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/MainActivity.cs: -------------------------------------------------------------------------------- 1 |  2 | using Android.App; 3 | using Android.Content.PM; 4 | using Android.OS; 5 | 6 | namespace Example.Forms.Droid 7 | { 8 | [Activity(Label = "Example.Forms", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 9 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 10 | { 11 | protected override void OnCreate(Bundle bundle) 12 | { 13 | TabLayoutResource = Resource.Layout.Tabbar; 14 | ToolbarResource = Resource.Layout.Toolbar; 15 | 16 | base.OnCreate(bundle); 17 | 18 | global::Xamarin.Forms.Forms.Init(this, bundle); 19 | LoadApplication(new App()); 20 | } 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Resources/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Droid/Resources/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Resources/drawable-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Droid/Resources/drawable-xhdpi/icon.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Resources/drawable-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Droid/Resources/drawable-xxhdpi/icon.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Resources/drawable/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Droid/Resources/drawable/icon.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Resources/layout/Tabbar.axml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Resources/layout/Toolbar.axml: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Droid/Resources/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 26 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using AppKit; 2 | using Foundation; 3 | using Xamarin.Forms.Platform.MacOS; 4 | 5 | namespace Example.Forms.Mac 6 | { 7 | [Register("AppDelegate")] 8 | public class AppDelegate : FormsApplicationDelegate 9 | { 10 | NSWindow window; 11 | public AppDelegate() 12 | { 13 | var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled; 14 | 15 | var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768); 16 | window = new NSWindow(rect, style, NSBackingStore.Buffered, false); 17 | window.Title = "Xamarin.Forms on Mac!"; // choose your own Title here 18 | window.TitleVisibility = NSWindowTitleVisibility.Hidden; 19 | } 20 | 21 | public override NSWindow MainWindow 22 | { 23 | get { return window; } 24 | } 25 | 26 | public override void DidFinishLaunching(NSNotification notification) 27 | { 28 | Xamarin.Forms.Forms.Init(); 29 | LoadApplication(new App()); 30 | base.DidFinishLaunching(notification); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "filename": "AppIcon-16.png", 5 | "size": "16x16", 6 | "scale": "1x", 7 | "idiom": "mac" 8 | }, 9 | { 10 | "filename": "AppIcon-16@2x.png", 11 | "size": "16x16", 12 | "scale": "2x", 13 | "idiom": "mac" 14 | }, 15 | { 16 | "filename": "AppIcon-32.png", 17 | "size": "32x32", 18 | "scale": "1x", 19 | "idiom": "mac" 20 | }, 21 | { 22 | "filename": "AppIcon-32@2x.png", 23 | "size": "32x32", 24 | "scale": "2x", 25 | "idiom": "mac" 26 | }, 27 | { 28 | "filename": "AppIcon-128.png", 29 | "size": "128x128", 30 | "scale": "1x", 31 | "idiom": "mac" 32 | }, 33 | { 34 | "filename": "AppIcon-128@2x.png", 35 | "size": "128x128", 36 | "scale": "2x", 37 | "idiom": "mac" 38 | }, 39 | { 40 | "filename": "AppIcon-256.png", 41 | "size": "256x256", 42 | "scale": "1x", 43 | "idiom": "mac" 44 | }, 45 | { 46 | "filename": "AppIcon-256@2x.png", 47 | "size": "256x256", 48 | "scale": "2x", 49 | "idiom": "mac" 50 | }, 51 | { 52 | "filename": "AppIcon-512.png", 53 | "size": "512x512", 54 | "scale": "1x", 55 | "idiom": "mac" 56 | }, 57 | { 58 | "filename": "AppIcon-512@2x.png", 59 | "size": "512x512", 60 | "scale": "2x", 61 | "idiom": "mac" 62 | } 63 | ], 64 | "info": { 65 | "version": 1, 66 | "author": "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Entitlements.plist: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Info.plist: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | CFBundleName 6 | Example.Forms.Mac 7 | CFBundleIdentifier 8 | com.demo.mac.Example-Forms-Mac 9 | CFBundleShortVersionString 10 | 1.0 11 | CFBundleVersion 12 | 1 13 | LSMinimumSystemVersion 14 | 10.15 15 | CFBundleDevelopmentRegion 16 | en 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | NSHumanReadableCopyright 24 | ${AuthorCopyright:HtmlEncode} 25 | NSPrincipalClass 26 | NSApplication 27 | NSMainStoryboardFile 28 | Main 29 | XSAppIconAssets 30 | Assets.xcassets/AppIcon.appiconset 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/Main.cs: -------------------------------------------------------------------------------- 1 | using AppKit; 2 | 3 | namespace Example.Forms.Mac 4 | { 5 | static class MainClass 6 | { 7 | static void Main(string[] args) 8 | { 9 | NSApplication.Init(); 10 | NSApplication.SharedApplication.Delegate = new AppDelegate(); // add this line 11 | NSApplication.Main(args); 12 | } 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/ViewController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using AppKit; 4 | using Foundation; 5 | 6 | namespace Example.Forms.Mac 7 | { 8 | public partial class ViewController : NSViewController 9 | { 10 | public ViewController(IntPtr handle) : base(handle) 11 | { 12 | } 13 | 14 | public override void ViewDidLoad() 15 | { 16 | base.ViewDidLoad(); 17 | 18 | // Do any additional setup after loading the view. 19 | } 20 | 21 | public override NSObject RepresentedObject 22 | { 23 | get 24 | { 25 | return base.RepresentedObject; 26 | } 27 | set 28 | { 29 | base.RepresentedObject = value; 30 | // Update the view, if already loaded. 31 | } 32 | } 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Mac/ViewController.designer.cs: -------------------------------------------------------------------------------- 1 | // WARNING 2 | // 3 | // This file has been generated automatically by Xamarin Studio to store outlets and 4 | // actions made in the UI designer. If it is removed, they will be lost. 5 | // Manual changes to this file may not be handled correctly. 6 | // 7 | using Foundation; 8 | 9 | namespace Example.Forms.Mac 10 | { 11 | [Register("ViewController")] 12 | partial class ViewController 13 | { 14 | void ReleaseDesignerOutlets() 15 | { 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Tizen/Example.Forms.Tizen.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Exe 5 | tizen80 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Tizen/Main.cs: -------------------------------------------------------------------------------- 1 | namespace Example.Forms.Tizen 2 | { 3 | internal class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication 4 | { 5 | protected override void OnCreate() 6 | { 7 | base.OnCreate(); 8 | LoadApplication(new App()); 9 | } 10 | 11 | protected override void OnTerminate() 12 | { 13 | base.OnTerminate(); 14 | } 15 | 16 | private static void Main(string[] args) 17 | { 18 | var app = new Program(); 19 | Xamarin.Forms.Forms.Init(app, true); 20 | app.Run(args); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Tizen/shared/res/Example.Forms.Tizen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.Tizen/shared/res/Example.Forms.Tizen.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.Tizen/tizen-manifest.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Example.Forms.Tizen.png 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/App.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | 9 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Assets/LockScreenLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.UWP/Assets/LockScreenLogo.scale-200.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Assets/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.UWP/Assets/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Assets/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.UWP/Assets/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Assets/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.UWP/Assets/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Assets/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.UWP/Assets/StoreLogo.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Assets/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.UWP/Assets/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/MainPage.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/MainPage.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace Example.Forms.UWP 2 | { 3 | public sealed partial class MainPage 4 | { 5 | public MainPage() 6 | { 7 | InitializeComponent(); 8 | 9 | LoadApplication(new Forms.App()); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Package.appxmanifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 8 | 9 | 13 | 14 | 15 | 16 | 17 | Example.Forms.UWP 18 | alzollin 19 | Assets\StoreLogo.png 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.UWP/Properties/Default.rd.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 |  2 | using Foundation; 3 | using Lottie.Forms.Platforms.Ios; 4 | using UIKit; 5 | 6 | namespace Example.Forms.iOS 7 | { 8 | // The UIApplicationDelegate for the application. This class is responsible for launching the 9 | // User Interface of the application, as well as listening (and optionally responding) to 10 | // application events from iOS. 11 | [Register("AppDelegate")] 12 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 13 | { 14 | // 15 | // This method is invoked when the application has loaded and is ready to run. In this 16 | // method you should instantiate the window, load the UI into it and then make the window 17 | // visible. 18 | // 19 | // You have 17 seconds to return from this method, or iOS will terminate your application. 20 | // 21 | public override bool FinishedLaunching(UIApplication app, NSDictionary options) 22 | { 23 | global::Xamarin.Forms.Forms.Init(); 24 | LoadApplication(new App()); 25 | 26 | return base.FinishedLaunching(app, options); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIDeviceFamily 6 | 7 | 1 8 | 2 9 | 10 | UISupportedInterfaceOrientations 11 | 12 | UIInterfaceOrientationPortrait 13 | UIInterfaceOrientationLandscapeLeft 14 | UIInterfaceOrientationLandscapeRight 15 | 16 | UISupportedInterfaceOrientations~ipad 17 | 18 | UIInterfaceOrientationPortrait 19 | UIInterfaceOrientationPortraitUpsideDown 20 | UIInterfaceOrientationLandscapeLeft 21 | UIInterfaceOrientationLandscapeRight 22 | 23 | MinimumOSVersion 24 | 7.0 25 | CFBundleDisplayName 26 | Example.Forms 27 | CFBundleIdentifier 28 | com.yourcompany.Example.Forms 29 | CFBundleVersion 30 | 1.0 31 | CFBundleIconFiles 32 | 33 | Icon-60@2x 34 | Icon-60@3x 35 | Icon-76 36 | Icon-76@2x 37 | Default 38 | Default@2x 39 | Default-568h@2x 40 | Default-Portrait 41 | Default-Portrait@2x 42 | Icon-Small-40 43 | Icon-Small-40@2x 44 | Icon-Small-40@3x 45 | Icon-Small 46 | Icon-Small@2x 47 | Icon-Small@3x 48 | 49 | UILaunchStoryboardName 50 | LaunchScreen 51 | CFBundleName 52 | Example.Forms 53 | 54 | 55 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Main.cs: -------------------------------------------------------------------------------- 1 | using UIKit; 2 | 3 | namespace Example.Forms.iOS 4 | { 5 | public class Application 6 | { 7 | // This is the main entry point of the application. 8 | private static void Main(string[] args) 9 | { 10 | // if you want to use a different Application Delegate class from "AppDelegate" 11 | // you can specify it here. 12 | UIApplication.Main(args, null, "AppDelegate"); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Default-568h@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Default-Portrait.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Default-Portrait@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Default.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Default@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-60@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-60@3x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-76.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-76@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-Small-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-Small-40.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-Small-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-Small-40@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-Small-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-Small-40@3x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-Small.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-Small@2x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/Resources/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/Resources/Icon-Small@3x.png -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/iTunesArtwork: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/iTunesArtwork -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms.iOS/iTunesArtwork@2x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseflow/LottieXamarin/0c5b5965394005ffa11598cd4e58c1654f678ab0/Samples/Forms/Example.Forms.iOS/iTunesArtwork@2x -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms/App.xaml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms/App.xaml.cs: -------------------------------------------------------------------------------- 1 |  2 | using Xamarin.Forms; 3 | 4 | namespace Example.Forms 5 | { 6 | public partial class App : Application 7 | { 8 | public App() 9 | { 10 | InitializeComponent(); 11 | 12 | MainPage = new NavigationPage(new Example.Forms.MainPage()); 13 | } 14 | 15 | protected override void OnStart() 16 | { 17 | // Handle when your app starts 18 | } 19 | 20 | protected override void OnSleep() 21 | { 22 | // Handle when your app sleeps 23 | } 24 | 25 | protected override void OnResume() 26 | { 27 | // Handle when your app resumes 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms/Example.Forms.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | net6.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | App.xaml 23 | 24 | 25 | AssetPage.xaml 26 | 27 | 28 | AsseControlsPagetPage.xaml 29 | 30 | 31 | EmbeddedPage.xaml 32 | 33 | 34 | MainPage.xaml 35 | 36 | 37 | StreamPage.xaml 38 | 39 | 40 | UrlPage.xaml 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms/Pages/AssetPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | using Xamarin.Forms.PlatformConfiguration.iOSSpecific; 3 | 4 | namespace Example.Forms 5 | { 6 | public partial class AssetPage : ContentPage 7 | { 8 | public AssetPage() 9 | { 10 | InitializeComponent(); 11 | 12 | On().SetUseSafeArea(true); 13 | } 14 | 15 | private void Slider_OnValueChanged(object sender, ValueChangedEventArgs e) 16 | { 17 | animationView.Progress = (float)e.NewValue; 18 | } 19 | 20 | private void Handle_OnFinish(object sender, System.EventArgs e) 21 | { 22 | DisplayAlert(string.Empty, $"{nameof(animationView.OnFinishedAnimation)} invoked!", "OK"); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms/Pages/ControlsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Xamarin.Forms; 3 | using Xamarin.Forms.PlatformConfiguration.iOSSpecific; 4 | 5 | namespace Example.Forms 6 | { 7 | public partial class ControlsPage : ContentPage 8 | { 9 | public ControlsPage() 10 | { 11 | InitializeComponent(); 12 | 13 | On().SetUseSafeArea(true); 14 | } 15 | 16 | protected override void OnAppearing() 17 | { 18 | base.OnAppearing(); 19 | 20 | if (BindingContext is ControlsViewModel controlsViewModel) 21 | { 22 | controlsViewModel.AnimationClicked -= ControlsViewModel_AnimationClicked; 23 | controlsViewModel.AnimationClicked += ControlsViewModel_AnimationClicked; 24 | } 25 | } 26 | 27 | protected override void OnDisappearing() 28 | { 29 | base.OnDisappearing(); 30 | 31 | if (BindingContext is ControlsViewModel controlsViewModel) 32 | { 33 | controlsViewModel.AnimationClicked -= ControlsViewModel_AnimationClicked; 34 | } 35 | } 36 | 37 | private void ControlsViewModel_AnimationClicked(object sender, EventArgs e) 38 | { 39 | DisplayAlert("Clicked", "You have clicked on the animation.", "OK"); 40 | } 41 | 42 | private void AnimationView_OnAnimationUpdate(object sender, float e) 43 | { 44 | progressSlider.Value = e; 45 | } 46 | 47 | private void Slider_OnValueChanged(object sender, ValueChangedEventArgs e) 48 | { 49 | animationView.Progress = (float)e.NewValue; 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms/Pages/EmbeddedPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Xamarin.Forms; 2 | using Xamarin.Forms.PlatformConfiguration.iOSSpecific; 3 | 4 | namespace Example.Forms 5 | { 6 | public partial class EmbeddedPage : ContentPage 7 | { 8 | public EmbeddedPage() 9 | { 10 | InitializeComponent(); 11 | 12 | On().SetUseSafeArea(true); 13 | } 14 | 15 | private void Slider_OnValueChanged(object sender, ValueChangedEventArgs e) 16 | { 17 | animationView.Progress = (float)e.NewValue; 18 | } 19 | 20 | private void Handle_OnFinish(object sender, System.EventArgs e) 21 | { 22 | DisplayAlert(string.Empty, $"{nameof(animationView.OnFinishedAnimation)} invoked!", "OK"); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Samples/Forms/Example.Forms/Pages/MainPage.xaml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 16 | 17 |