├── .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