• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 6.5.2
2### Bugs Fixed
3* Fix a NPE when running Lottie in instrumentation tests ([#2546](https://github.com/airbnb/lottie-android/pull/2546))
4* Add support for new reduced motion options in Compose ([#2542](https://github.com/airbnb/lottie-android/pull/2542))
5
6# 6.5.1
7### Bugs Fixed
8* Fix value callback is not called for PathKeyframeAnimation ([#2540](https://github.com/airbnb/lottie-android/pull/2540))
9* Fix shadow softness accuracy ([#2541](https://github.com/airbnb/lottie-android/pull/2541))
10* Add a global configuration to control reduced motion settings for a11y ([#2536](https://github.com/airbnb/lottie-android/pull/2536))
11* Fix a NPE on ImageAssetManager#getContext ([#2532](https://github.com/airbnb/lottie-android/pull/2532))
12* Improve strokes with skew ([#2531](https://github.com/airbnb/lottie-android/pull/2531))
13* LottieCompositionFactory: Avoid NPE when animation contains a Font Family and Context is null ([#2530](https://github.com/airbnb/lottie-android/pull/2530))
14* LottieCompositionFactory: Add factory methods that take an okio Source ([#2527](https://github.com/airbnb/lottie-android/pull/2527))
15* LottieCompositionFactory#fromZipStreamSyncInternal close FileOutputStream ([#2548](https://github.com/airbnb/lottie-android/pull/2548))
16
17# 6.5.0
18### New Features
19* Apply blend modes to layers and add Multiply ([#2519](https://github.com/airbnb/lottie-android/pull/2519))
20* Add initial support for text range selectors ([#2518](https://github.com/airbnb/lottie-android/pull/2518))
21* Add a new feature flag API to allow for opting into newer platform features ([#2512](https://github.com/airbnb/lottie-android/pull/2512))
22* Add an API to get the unscaled width/height of a composition ([#2514](https://github.com/airbnb/lottie-android/pull/2514))
23
24### Bugs Fixes
25* Improve the accuracy of drop shadow position and softness ([#2523](https://github.com/airbnb/lottie-android/pull/2523))
26* Treat appcompat as an API dependency ([#2507](https://github.com/airbnb/lottie-android/pull/2507))
27
28# 6.4.1
29### Bugs Fixed
30* Scale base64 encoded bitmaps ([#2501](https://github.com/airbnb/lottie-android/pull/2501))
31* Prevent systrace strings from getting created when systrace is off ([#2493](https://github.com/airbnb/lottie-android/pull/2493))
32* Allow missing end values for integer animations ([#2487](https://github.com/airbnb/lottie-android/pull/2487))
33* Add an extra null check in BaseKeyframeAnimation ([#2486](https://github.com/airbnb/lottie-android/pull/2486))
34
35# 6.4.0
36### New Features
37* Add support for reduced motion marker names ([#2451](https://github.com/airbnb/lottie-android/pull/2451))
38* Support GZIP and TGS network downloads ([#2454](https://github.com/airbnb/lottie-android/pull/2454))
39### Bugs Fixed
40* Allow easings to go <0 and >1 ([#2457](https://github.com/airbnb/lottie-android/pull/2457))
41* Fix a memory leak in LottieTask ([#2465](https://github.com/airbnb/lottie-android/pull/2465))
42* Prevent play from working after a non-Lottie drawable was set and then returned back ([#2468](https://github.com/airbnb/lottie-android/pull/2468))
43* Respect autoPlay in LottieAnimationView when setting a new composition ([#2469](https://github.com/airbnb/lottie-android/pull/2469))
44* Call LottieTask synchronously when already on the main thread ([#2470](https://github.com/airbnb/lottie-android/pull/2470))
45* Properly rescale bitmaps when the system scale changes ([#2475](https://github.com/airbnb/lottie-android/pull/2475))
46
47# 6.3.0
48### New Features
49* Add support dynamic path properties on shape contents ([#2439](https://github.com/airbnb/lottie-android/pull/2439))
50* Add support for gzipped and tgs files ([#2435](https://github.com/airbnb/lottie-android/pull/2435))
51* Add an option to clip text if it extends beyond its bounding box ([#2412](https://github.com/airbnb/lottie-android/pull/2412))
52
53### Bugs Fixed
54* Make all LottieAnimationView setters idempotent ([#2441](https://github.com/airbnb/lottie-android/pull/2441))
55* Fix a rendering artifact for polygons with large strokes ([#2440](https://github.com/airbnb/lottie-android/pull/2440))
56* Re-scale bitmaps if the system scale changes ([#2438](https://github.com/airbnb/lottie-android/pull/2438))
57* Handle null color callbacks in solid layer ([#2434](https://github.com/airbnb/lottie-android/pull/2434))
58* Handle null shape data end values ([#2433](https://github.com/airbnb/lottie-android/pull/2433))
59* Fix gradient colors when the progress is <0 or > 1 ([#2427](https://github.com/airbnb/lottie-android/pull/2427))
60
61# 6.2.0
62### New Features
63* Implement screen, overlay, darken, lighten, and add blend modes ([#2408](https://github.com/airbnb/lottie-android/pull/2408))
64* Implement auto-orient ([#2416](https://github.com/airbnb/lottie-android/pull/2416))
65* Allow globally configuring asyncUpdates ([#2356](https://github.com/airbnb/lottie-android/pull/2356))
66* Add an optional `close` param to LottieCompositionFactory.fromJsonReader ([#2342](https://github.com/airbnb/lottie-android/pull/2342))
67* Allow dynamic properties for solid layer colors ([#2378](https://github.com/airbnb/lottie-android/pull/2378))
68* Update baseline profiles ([#2404](https://github.com/airbnb/lottie-android/pull/2404))
69* Add a ZipInputStream overload to LottieAnimationView.setAnimation ([#2411](https://github.com/airbnb/lottie-android/pull/2411))
70
71### Bugs Fixed
72* Upgrade okio ([#2418](https://github.com/airbnb/lottie-android/pull/2418))
73* Improve cache hits for synchronous LottieCompositionFactory methods ([#2379](https://github.com/airbnb/lottie-android/pull/2379))
74* Fix gradient interpolation for opacity stops beyond the last color stop ([#2377](https://github.com/airbnb/lottie-android/pull/2377))
75* Fix Potential NPE In NetworkCache.clearCache ([#2364](https://github.com/airbnb/lottie-android/pull/2364))
76* Fix an IllegalArgumentException when creating a bitmap ([#2351](https://github.com/airbnb/lottie-android/pull/2351))
77* Fix rounded corners for non-closed paths ([#2405](https://github.com/airbnb/lottie-android/pull/2405))
78* Fix varying opacity stops across keyframes in the same gradient  ([#2406](https://github.com/airbnb/lottie-android/pull/2406))
79* Fix a NullPointerException in ColorKeyframeAnimation  ([#2407](https://github.com/airbnb/lottie-android/pull/2407))
80
81# 6.1.0
82### New Features
83* New multithreaded `asyncUpdates` feature which moves the entire update phase of an animation off of the main thread. For more information, refer to [this blog post](https://gpeal.medium.com/lottie-android-6-1-lottie-goes-multithreaded-67c09c091fd7). ([#2276](https://github.com/airbnb/lottie-android/pull/2276))
84* Allow `LottieCompositionFactory` to not close input streams ([#2286](https://github.com/airbnb/lottie-android/pull/2286) and [#2319](https://github.com/airbnb/lottie-android/pull/2319))
85* Allow Lottie to be initialized multiple times ([#2323](https://github.com/airbnb/lottie-android/pull/2323))
86* Add an additional null check to TransformKeyframeAnimation ([#2381](https://github.com/airbnb/lottie-android/pull/2381))
87* Fix asyncUpdates for Nougat and below ([#2380](https://github.com/airbnb/lottie-android/pull/2380))
88
89### Bugs Fixed
90* Close input streams for cache hits ([#2253](https://github.com/airbnb/lottie-android/pull/2253))
91* Always use ApplicationContext in ImageAssetManager to ensure it can be reused ([#2289](https://github.com/airbnb/lottie-android/pull/2289))
92* Hold weak references to success/failure listeners ([#2293](https://github.com/airbnb/lottie-android/pull/2293))
93* Add default values for line join and cap types ([#2337](https://github.com/airbnb/lottie-android/pull/2337))
94* Apply layer parent opacity to text ([#2336](https://github.com/airbnb/lottie-android/pull/2336))
95
96# 6.0.1
97### Bugs Fixed
98* Allow loading URLs with a length of greater than 255 chars ([#2311](https://github.com/airbnb/lottie-android/pull/2311))
99
100# 6.0.0
101### New Features
102* Major overhaul of text layout. Text layout should be more consistent across the board ([#2162](https://github.com/airbnb/lottie-android/pull/2162))
103* Allow animations in zip files to contain embedded base64 encoded images ([#2110](https://github.com/airbnb/lottie-android/pull/2110))
104* Allow zip files to contain embedded fonts. Context was added to some LottieCompositionFactory APIs to support this ([#2102](https://github.com/airbnb/lottie-android/pull/2102))
105* Add fontStyle and fontName as parameters in new overloads in FontAssetDelegate ([#2103](https://github.com/airbnb/lottie-android/pull/2103))
106* Allow decimal values for precomp size ([#2138](https://github.com/airbnb/lottie-android/pull/2138))
107* Allow interpolating in between gradients that have different numbers of opacity stops ([#2160](https://github.com/airbnb/lottie-android/pull/2160))
108* Support box position in document data ([#2139](https://github.com/airbnb/lottie-android/pull/2139))
109* Allow repeater contents to be the target of dynamic properties ([#2164](https://github.com/airbnb/lottie-android/pull/2164))
110* Provide a global LottieTask listener to aid in Espresso idle resources ([#2161](https://github.com/airbnb/lottie-android/pull/2161))
111* Allow setting a default font extension ([#2166](https://github.com/airbnb/lottie-android/pull/2166))
112* Add an option to completely disable Lottie's network cache ([#2158](https://github.com/airbnb/lottie-android/pull/2158))
113* Allow setting a font map for custom fonts ([#2180](https://github.com/airbnb/lottie-android/pull/2180))
114* Allow ImageAssetDelegate to be used when a drawable doesn't have a callback ([#2183](https://github.com/airbnb/lottie-android/pull/2072))
115* Make Layer name and refId public ([#2188](https://github.com/airbnb/lottie-android/pull/2188))
116* Allow rendering at the composition frame rate ([#2184](https://github.com/airbnb/lottie-android/pull/2184))
117### Bugs Fixed
118* Fixed an NPE when decoding an invalid bitmap and for transform opacity, and transform anchor position ([#2117](https://github.com/airbnb/lottie-android/pull/2117), [#2179](https://github.com/airbnb/lottie-android/pull/2179), and [#2197](https://github.com/airbnb/lottie-android/pull/2197))
119* Only store application context in ImageAssetManager ([#2163](https://github.com/airbnb/lottie-android/pull/2163))
120* Prevent rounded corner effects from trying to round a shape that has control points on its vertices already ([#2165](https://github.com/airbnb/lottie-android/pull/2165))
121* Pass LottieComposition directly while building layers to avoid race conditions ([#2167](https://github.com/airbnb/lottie-android/pull/2167))
122* Allow progress to be restored from saved state ([#2072](https://github.com/airbnb/lottie-android/pull/2072))
123* Take top and left Drawable bounds into account to support things like SeekBar thumbs ([#2182](https://github.com/airbnb/lottie-android/pull/2182))
124* Use the correct cache key for network animations ([#2198](https://github.com/airbnb/lottie-android/pull/2198))
125
126# 5.2.0
127### Bugs Fixed
128* De-dupe gradient stops. On pre-Oreo devices, if you had color and opacity stops in the same place and used hardware acceleration, you may have seen artifacts at the stop positions as of 5.1.1 [#20814](https://github.com/airbnb/lottie-android/pull/2081)
129
130# 5.1.1
131### New Features
132* Added support for gradient opacity stops at different points than color stops ([#2062](https://github.com/airbnb/lottie-android/pull/2062))
133* Allow notifying LottieDrawable that system animations are disabled ([#2063](https://github.com/airbnb/lottie-android/pull/2063))
134
135### Bugs Fixed
136* Removed some rounding errors that occurred when setting min/max frames ([#2064](https://github.com/airbnb/lottie-android/pull/2064))
137* Clear onVisibleAction one it is consumed ([#2066](https://github.com/airbnb/lottie-android/pull/2066))
138* Fixed a Xiaomi Android 10 specific crash ([#2061](https://github.com/airbnb/lottie-android/pull/2061))
139* Made LottieAnimationView.start() mimic playAnimation ([#2056](https://github.com/airbnb/lottie-android/pull/2056))
140* Remove @RestrictTo from LottieNetworkFetcher ([#2049](https://github.com/airbnb/lottie-android/pull/2049))
141
142# 5.0.3
143### Bugs Fixed
144* Invalidate the software renering bitmap when invalidate is called ([#2034](https://github.com/airbnb/lottie-android/pull/2034))
145
146# 5.0.2
147### Bugs Fixed
148* Prevent a crash when using software rendering before a composition has been set ([#2025](https://github.com/airbnb/lottie-android/pull/2025))
149
150# 5.0.1
151### New Features
152* [Removed API] Removed the `setScale(float)` APIs from `LottieAnimationView` and `LottieDrawable`. The expected behavior was highly ambiguous when paired with other scale types and canvas transformations. For the vast majority of cases, ImageView.ScaleType should be sufficient. For remaining cases, you may apply transformations to Canvas and use `LottieDrawable#draw` directly.
153* Added support for the "Rounded Corners" effect on Shape and Rect layers ([#1953](https://github.com/airbnb/lottie-android/pull/1953))
154* Prior to 5.0, LottieAnimationView would _always_ call [setLayerType](https://developer.android.com/reference/android/view/View#setLayerType(int,%20android.graphics.Paint)) with either [HARDWARE](https://developer.android.com/reference/android/view/View#LAYER_TYPE_HARDWARE) or [SOFTWARE](https://developer.android.com/reference/android/view/View#LAYER_TYPE_SOFTWARE). In the hardware case, this would case Android to allocate a dedicated hardware buffer for the animation that had to be uploaded to the GPU separately. In the software case, LottieAnimationView would rely on View's internal [drawing cache](https://developer.android.com/reference/android/view/View#isDrawingCacheEnabled()).
155
156    This has a few disadvantages:
157
158  * The hardware/software distinction happened at the LottieAnimationView level. That means that consumers of LottieDrawable (such as lottie-compose) had no way to
159          choose a render mode.
160  * Dedicated memory for Lottie was _always_ allocated. In the software case, it would be a bitmap that is the size of the LottieAnimationView and in the hardware case, it was a dedicated hardware layer.
161
162  Benefits as a result of this change:
163
164  * Reduced memory consumption. In the hardware case, no new memory is allocated. In the software case, Lottie will create a bitmap that is the intersection of your View/Composition bounds mapped with the drawing transformation which often yields a surface are that is smaller than the entire LottieAnimationView.
165  * lottie-compose now supports setting a RenderMode.
166  * Custom uses of LottieDrawable now support setting a RenderMode via [setRenderMode](https://github.com/airbnb/lottie-android/blob/c5b8318c7cf205e95db143955acbfc69f86bc339/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java#L329).
167* Lottie can now render outside of its composition bounds. To allow this with views such as LottieAnimationView, set `clipToCompositionBounds` to false on `LottieDrawable` or `LottieAnimationView` and `clipChildren` to false on the parent view. For Compose, use the `clipToCompositionBounds` parameter.
168* Prior to 5.0, LottieAnimationView handled all animation controls when the view's visibility or attach state changed. This worked fine for consumers of LottieAnimationView. However, custom uses of LottieDrawable were prone to leaking infinite animators if they did not properly handle cancelling animations correctly. This opens up the possibility for unexpected behavior and increased battery drain. Lottie now behaves more like animated drawables in the platform and moves this logic into the Drawable via its [setVisible](https://developer.android.com/reference/android/graphics/drawable/Drawable#setVisible(boolean,%20boolean)) API. This should lead to no explicit behavior changes if you are using LottieAnimationView. However, if you are using LottieDrawable directly and were explicitly pausing/cancelling animations on lifecycle changes, you may want to cross check your expected behavior with that of LottieDrawable after this update. This change also resolved a long standing bug when Lottie is used in RecyclerViews due to the complex way in which RecyclerView handles View lifecycles ([#1495](https://github.com/airbnb/lottie-android/issues/1495)).
169  [#1981](https://github.com/airbnb/lottie-android/issues/1981)
170* Add an API [setClipToCompositionBounds](https://github.com/airbnb/lottie-android/blob/c5b8318c7cf205e95db143955acbfc69f86bc339/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java#L218) on LottieAnimationView, LottieDrawable, and the LottieAnimation composable to prevent Lottie from clipping animations to the composition bounds.
171* Add an API to always render dynamically set bitmaps at the original animation bounds. Previously, dynamically set bitmaps would be rendered at their own size anchored to the top left
172  of the original bitmap. This meant that if you wanted to supply a lower resolution bitmap to save memory, it would render smaller. The default behavior remains the same but you can
173  enable [setMaintainOriginalImageBounds](https://github.com/airbnb/lottie-android/blob/c5b8318c7cf205e95db143955acbfc69f86bc339/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java#L264) to be able to supply lower resolution bitmaps ([#1706](https://github.com/airbnb/lottie-android/issues/1706)).
174* Add support for `LottieProperty.TEXT` to use dynamic properties for text. This enables dynamic text support for lottie-compose ([#1995](https://github.com/airbnb/lottie-android/issues/1495)).
175* Add getters for Marker fields ([#1998](https://github.com/airbnb/lottie-android/pull/1998))
176* Add support for reversed polystar paths ([#2003](https://github.com/airbnb/lottie-android/pull/2003))
177
178### Bugs Fixed
179* Fix a rare NPE multi-threaded race condition ([#1959](https://github.com/airbnb/lottie-android/pull/1959))
180* Don't cache dpScale to support moving Activities between different displays ([#1915](https://github.com/airbnb/lottie-android/pull/1915))
181* Fix some cases that would prevent LottieAnimationView or LottieDrawable from being rendered by the Android Studio layout preview ([#1984](https://github.com/airbnb/lottie-android/pull/1984))
182* Better handle animations in which there is only a single color in a gradient ([#1985](https://github.com/airbnb/lottie-android/pull/1985))
183* Fix a rare race condition that could leak a LottieTask object ([#1986](https://github.com/airbnb/lottie-android/pull/1986))
184* Call onAnimationEnd when animations are cancelled to be consistent with platform APIs ([#1994](https://github.com/airbnb/lottie-android/issues/1994))
185* Fix a bug that would only render part of a path if the trim path extended from 0-100 and had an offset ([#1999](https://github.com/airbnb/lottie-android/pull/1999))
186* Add support for languages that use DIRECTIONALITY_NONSPACING_MARK like Hindi ([#2001](https://github.com/airbnb/lottie-android/pull/2001))
187* Prevent LottieAnimationView from overwriting user actions when restoring instance state ([#2002](https://github.com/airbnb/lottie-android/pull/2002))
188
189# 4.2.2
190### Bugs Fixed
191* Removed allocations when setting paint alpha prior to API 29 ([#1929](https://github.com/airbnb/lottie-android/pull/1929))
192* Added application/x-zip and application/x-zip-compressed as recognized zip mime types ([#1950](https://github.com/airbnb/lottie-android/pull/1950))
193* Fixed a rare NPE in TransformKeyframeAnimation ([#1955](https://github.com/airbnb/lottie-android/pull/1955))
194
195# 4.2.1
196### Features and Improvements
197* Upgraded to Compose 1.0.3 ([#1913](https://github.com/airbnb/lottie-android/pull/1913))
198* Added an overload to TextDelegate that provides layerName ([#1931](https://github.com/airbnb/lottie-android/pull/1931))
199### Bugs Fixed
200* Removed some extra Integer allocations with dynamic colors ([#1927](https://github.com/airbnb/lottie-android/pull/1927))
201* Fixed two rare potential NPEs ([#1917](https://github.com/airbnb/lottie-android/pull/1917))
202
203# 4.2.0
204* Fixed some rounding errors with trim paths ([#1897](https://github.com/airbnb/lottie-android/pull/1897))
205
206# 4.1.0
207* Added support for gaussian blur effects ([#1859](https://github.com/airbnb/lottie-android/pull/1859))
208* Added support for drop shadow effects ([#1860](https://github.com/airbnb/lottie-android/pull/1860))
209
210BREAKING CHANGES
211Before this release, drop shadows and blurs were completely ignored. They will now be rendered. In most cases, they will now be rendered correctly. However, you should read the implementation details [here](https://airbnb.io/lottie/#/supported-features?id=drop-shadows-and-gaussian-blurs-on-android) if they are not.
212
213# 4.0.0
214* Support for lottie-compose 4.0.0
215
216# 3.7.2
217* Support for lottie-compose 1.0.0-rc02-1
218
219# 3.7.1
220### Bugs Fixed
221* Made TextDelegate.getText public ([#1792](https://github.com/airbnb/lottie-android/pull/1792))
222* Fixed an incorrect time stretch calculation ([#1818](https://github.com/airbnb/lottie-android/pull/1818))
223* Use the application context in NetworkFetcher to prevent memory leaks ([#1832](https://github.com/airbnb/lottie-android/pull/1832))
224
225# 3.7.0
226### Features and Improvements
227* Added an API to ignore disabled system animations (setIgnoreDisabledSystemAnimations(boolean)) ([#1747](https://github.com/airbnb/lottie-android/pull/1747))
228* Added support for jpgs as image assets ([#1769](https://github.com/airbnb/lottie-android/pull/1769))
229### Bugs Fixed
230* Prevented duplicate positions in gradients which caused hardware accelerated rendering bugs on some phones ([#1768](https://github.com/airbnb/lottie-android/pull/1768))
231* Fixed some parsing errors that occurred in some animations exported with Flow ([#1771](https://github.com/airbnb/lottie-android/pull/1771))
232
233# 3.6.1
234### Bugs Fixed
235* Fixed a bug that would cause animations to stop animating if the same LottieAnimationView was used with multiple animations ([#1727](https://github.com/airbnb/lottie-android/pull/1737))
236
237# 3.6.0
238### Features and Improvements
239* `LottieProperty.TRANSFORM_POSITION_X` and `LottieProperty.TRANSFORM_POSITION_Y` has been added to enable dynamic properties on transform positions that have split dimensions enabled ([#1714](https://github.com/airbnb/lottie-android/pull/1714))
240* Allow targeting matte layers with dynamic properties/`KeyPath` ([#1710](https://github.com/airbnb/lottie-android/pull/1710))
241* Properly render points that have different interpolators on the x andy axis ([#1709](https://github.com/airbnb/lottie-android/pull/1709))
242* Support `ColorStateLists` in `LottieAnimationView` `lottie_colorFilter` xml attribute ([#1708](https://github.com/airbnb/lottie-android/pull/1708))
243### Bugs Fixed
244* Don't set `LottieDrawable` bounds internally. It will not respect the bounds set on it ([#1713](https://github.com/airbnb/lottie-android/pull/1713))
245* Fix a rare NPE running lazy composition tasks ([#1711](https://github.com/airbnb/lottie-android/pull/1711))
246* Don't render masks with <1px of width or height ([#1704](https://github.com/airbnb/lottie-android/pull/1704))
247* After replacing a composition on `LottieAnimationView` with another drawable then setting it back would cause the animation to not render ([#1703](https://github.com/airbnb/lottie-android/pull/1703))
248* Properly display text at the end of an animation ([#1689](https://github.com/airbnb/lottie-android/pull/1689))
249* Always cancel animations when a LottieDrawable is unscheduled from LottieAnimationView ([adb331](https://github.com/airbnb/lottie-android/commit/adb331))
250
251# 3.5.0
252### Features and Improvements
253* Added a new global configuration to add a custom network stack, custom network cache, enable systrace markers, and more ([#1629](https://github.com/airbnb/lottie-android/pull/1629))
254
255  * To use it, checkout the docs for `Lottie.initialize` and `LottieConfig.Builder`.
256* Add support for parsing dotLottie files ([#1660](https://github.com/airbnb/lottie-android/pull/1660))
257* Added support for pause listeners on `LottieDrawable` and `LottieAnimationView` ([#1662](https://github.com/airbnb/lottie-android/pull/1662))
258### Bugs Fixed
259* Properly cache animations loaded via url in memory ([#1657](https://github.com/airbnb/lottie-android/pull/1657))
260
261# 3.4.4
262### Bugs Fixed
263* Properly clamp gradient values ([#1636](https://github.com/airbnb/lottie-android/pull/1636))
264* Fix some scaling issues with text ([#1635](https://github.com/airbnb/lottie-android/pull/1635))
265* Add a warning instead of crashing when parsing an unknown matte type ([#1638](https://github.com/airbnb/lottie-android/pull/1638))
266* Clear cached gradients when setting a new value callback ([#1639](https://github.com/airbnb/lottie-android/pull/1639))
267
268# 3.4.2
269### Feature and Improvements
270* Disable hardware acceleration by default on Android 7.x ([#1586](https://github.com/airbnb/lottie-android/pull/1586))
271* Enable Lottie animations to preview in Android Studio (they may not be accurate, though)
272([#1572](https://github.com/airbnb/lottie-android/pull/1572))
273* More leniently parse opacity and colors to render Telegram stickers better ([#1612](https://github.com/airbnb/lottie-android/pull/1612) and [#1613](https://github.com/airbnb/lottie-android/pull/1612))
274* Use the correct cacheKey when LottieAnimationView loads an rawRes animation ([#1617](https://github.com/airbnb/lottie-android/pull/1617))
275* Prevent animations from blinking if they are rendered on multiple threads ([#1575](https://github.com/airbnb/lottie-android/pull/1575))
276
277
278# 3.4.1
279### Feature and Improvements
280* Added a KeyPath.COMPOSITION constant to set dynamic properties on the animation's root composition layer ([#1559](https://github.com/airbnb/lottie-android/pull/1559)).
281* A default style can now be set for all AnimationViews with lottieAnimationViewStyle ([#1524](https://github.com/airbnb/lottie-android/pull/1524)).
282
283# 3.4.0
284### Features and Improvements
285* Added optional cache key parameters to url loading to enable skipping the cache.
286* Added the ability to clear the Lottie cache via `LottieCompositionFactory.clearCache()`.
287
288### Bugs Fixed
289* Properly pass in progress to ValueCallbacks.
290* Clear existing ValueCallbacks if new ones overwrite old ones.
291* Clip interpolators that might loop back on themself to render something very close rather than crashing.
292* Fix time stretch  + time remap when there is a start offset.
293* Ensure that the first frame is rendered when a new composition is set even if it is not yet playing.
294* Properly render Telegram stickers that use [0,1] for color but [0,255] for alpha.
295* Ensure that LottieDrawable has the correct bounds when the composition updates before Marshmallow.
296* Fully clear off screen buffers pre-pie to prevent artifacts.
297* Play, not resume animations if they are played while not shown.
298
299# 3.3.1
300### Bugs Fixed
301* Clear alpha values when applying a mask or matte
302
303# 3.3.0
304### Features and Improvements
305* Added a safeMode API that wraps draw with a try/catch. Can be used for problematic devices
306 ([#1449](https://github.com/airbnb/lottie-android/pull/1449)).
307* Add the ability to skip composition caching ([#1450](https://github.com/airbnb/lottie-android/pull/1450)).
308* Add support for mask mode none.
309* Add an API to set the min and max frame from 2 markers.
310* Add support for TEXT_SIZE as a dynamic property for text layers.
311### Bugs Fixed
312* Improve the performance of setProgress, particularly for animations with many non-animated
313 properties.
314 * Fix a bug where animations may not resume on reattach if their state was saved after they were
315  detached.
316
317# 3.2.2
318# Bugs Fixed
319* Fixed two potential NPEs.
320
321# 3.2.0
322### Feature and Improvements
323* Added support for FIT_XY scale type.
324### Bugs Fixed
325* Improved testability while system animations are disabled.
326
327# 3.1.0
328### Features and Improvements
329* **Breaking Change** Replace JsonReader parsing APIs with InputStream variants to prevent
330exposing Lottie's copy of Moshi's json parser.
331* Add the ability to catch all Lottie composition errors with `setFailureListener` and
332`resetFailureListener` (#1321).
333* Add the ability to set a fallback drawable res when Lottie fails to parse a composition or
334load it from the internet. Use `setFallbackResource` from code or`lottie_fallbackRes` from xml.
335* Add the ability to render opacity on the layer level rather than the shape level. View the docs
336 for `setApplyingOpacityToLayersEnabled` for more info.
337* Add the ability to use dynamic properties on text that wasn't already animated.
338* Minor performance optimization when interpolating between colors.
339## Bugs Fixed
340* Fix the renderMode attribute from getting overwritten.
341* Prevent masks from either clipping edges or having thin borders pre-Pie.
342* Apply animation scale to dash pattern offsets.
343* Apply animation scale to gradient strokes.
344* Fuzzy match content types when downloading animations from the internet.
345* Prevent a StackOverflowException on KitKat.
346* Prevent resume() from resuming when system animations are disabled.
347* Prevent removeAllUpdateListeners() from removing internally used listeners.
348* Fix some time remap calculations.
349
350# 3.0.7
351* Fixed renderMode XML attr being ignored.
352* Allow progress to be set in between frames.
353* Fix a NullPointerException on 5.x.x devices for apps that use Proguard.
354
355# 3.0.6
356### Bugs Fixed
357* Fixed another LottieAnimationView visibility bug.
358
359# 3.0.5
360### Bugs Fixed
361* Fixed a native crash on Nougat.
362* Improved the performance of animations that have masks and mattes that are partially or fully off screen.
363
364
365# 3.0.4
366### Bugs Fixed
367* Use a copy of [Moshi's](https://github.com/square/moshi) JsonReader implementation to fix [#667](https://github.com/airbnb/lottie-android/issues/667).
368* Fix animations not autoplaying when they became visible on pre-marshmallow devices.
369* Fix PerformanceTracker#removeFrameListener not working.
370
371# 3.0.3
372### Bugs Fixed
373* Prevent network connections from being closed before parsing is finished.
374* invalidateSelf() after settings alpha.
375* Set the correct frame when animations end but speed is < 0.
376* Default missing content types to application/json.
377* Consistently use frameTimeNanos to prevent animation frame time from being < 0.
378
379# 3.0.2
380### Features and Improvements
381* Zipped animations with images now support WebP.
382
383### Bugs Fixed
384* Use frameTimeNanos LottieAnimator.
385* Set wasAnimatingWhenDetached to false at pause().
386
387# 3.0.1
388### Bugs Fixed
389* Fixed an edge case that would resume an animation when it is not shown.
390* Disable animations when the system animation scale is 0.
391* Fall back to hardware rendering when the animation is too large to create a drawing cache.
392
393# 3.0.0
394### Features and Improvements
395* **Significant** mask and matte performance improvements by only calling saveLayer() on the intersection bounds of the content and mask/matte.
396* Added support for dynamic properties on rectangles, gradient colors, and gradient fill opacity.
397* Added support for inverted and intersect masks.
398* Improved support for multiple masks per layer.
399* Added support for optimized bodymovin json with static transforms removed (v5.5.0+).
400* Added support for optimized bodymovin json that will omit duplicated vertex out points to reduce json file size (v5.5.0+).
401* Added support for centered, multiline text, and emojis.
402* Added support for masked text.
403* Added support for skew and skew angle in transforms.
404* Added support for markers. You can now call `setMinFrame`, `setMaxFrame` and `setMinAndMaxFrame` with a marker name.
405* Added support for hidden layers and properties (the eye button in After Effects).
406* Added support for multiple trim paths to be applied on a shape.
407* Removed **all** memory allocations during playback including autoboxing.
408* Replaced `enableHardwareAcceleration` with a new `setRenderMode` API because it has a third (`Automatic`) option. Refer to the docs for more info.
409* Added an XML attr for animation speed (lottie_speed).
410* Removed the recycleBitmaps() API because it is not neccesary anymore.
411* Prevented `invalidateSelf()` from being called and recalculating bounds many times per frame.
412### Bugs Fixed
413* Only redraw the animation when a value changed. This will have a major impact on animations that are static for part of their playback.
414* Optimized keyframes to recalculate values less frequently
415* Optimized static identity transforms so their matrix doesn't get recalculated on every frame.
416* Ensure that the last frame is played when setMaxFrame is called.
417* Prevent strokes from drawing when the scale is 0.
418* Prevented minFrame from being larger than maxFrame.
419* Return the correct (previous) bitmap when updating the BitmapAssetManager.
420* Properly use the in-memory cache for network animations.
421* Prevented color animations from interpolating before/after the start/end colors even if their interpolator goes <0 or >1.
422* Annotate `fetchBitmap()` as `@Nullable`
423* Fixed a bug in the local file cache that would save it with the wrong extensions.
424* Fixed a crash when an animation was missing gradient fill type.
425* Prevent shapes that have different numbers of control points in different keyframes from crashing.
426* Fixed an IndexOutOfBoundsException.
427* Pause Lottie in onVisibilityChanged.
428* Properly limited the LRU cache an enable its maximum size to be configured.
429* Prevented the cache from returning null values after a key was cleared.
430* Properly closed JsonReader in all cases.
431* Fixed text alignment for scaled text when drawn using fonts.
432* Use FutureTask rather than polling for composition parsing to complete.
433* [Sample App] Fixed Lottiefiles integration.
434
435# 2.8.0
436### Features and Improvements
437* Migrated to androidx. This release and all future releases are only compatible with projects that have been migrated to androidx.
438
439# 2.7.0
440### Features and Improvements
441* Removed deprecated LottieCompositionFactory APIs. If you were using JsonObjects, switch to Strings (#959).
442* Made LottieTask.EXECUTOR public and static so tests can set it.
443* Allow layer names to be stripped from JSON if desired.
444* Allow returning null from LottieValueCallbacks to fall back to the default value.
445### Bugs Fixed
446* Allow text stroke width to be a double (#940).
447
448# 2.6.0
449### Features and Improvements
450* Added support for loading an image from a url directly. See LottieCompositionFactory for more information.
451* Added support for loading an animation from a zip file that contains the json as well as images.
452    * URLs supports zip files as well as json files.
453* Deprecated `LottieComposition.Factory` in favor of LottieCompositionFactory.
454    * The new factory methods make it easier to catch exceptions by separating out success and
455      failure handlers. Previously, catching exceptions was impossible and would crash your app.
456    * All APIs now have a mandatory cacheKey that uses an LRU cache rather than a strong/weak ref cache.
457    * If the same animation is fetched multiple times in parallel, the same task will be returned.
458      This will be massively helpful for animations that are loaded in a list.
459    * InputStreams are now always closed even if you use the old APIs. Please be aware if you were
460      using this while upgrading.
461* Added support for miter limit.
462* [Sample App] Added the ability to load a file from assets.
463### Bugs Fixed
464* Fixed a timing issue when there was time stretch on a masked layer.
465* Fixed support for Android P.
466* Make a best-effort attempt at rendering shapes in which the number of vertices changes rather than crashing.
467* Fixed a bug in which the inner radius animation of a polystar wouldn't update.
468
469# 2.5.7
470* Reapply min/max frame once composition is loaded (#827).
471* Fixed a bug that would ignore setting minFrame to 0 before the composition was set (#820).
472* Prevented Lottie from drawing a recycled bitmap (#828).
473
474# 2.5.6
475* Added support for targeting Android P
476* Fixed a potential dangling Choreographer callback ([#775](https://githubcom/airbnb/lottie-android/pull/775))
477
478# 2.5.5
479* Fixed end times for layers/animations. Before, if the layer/animation out frame was 20, it would fully render frame 20. This is incorrect. The last rendered frame should be 19.999... in this case. This should make Lottie reflect After Effects more accurately. However, if you are getting the frame in onAnimationEnd or onAnimationRepeat, it will be one less than it used to be.
480* Added support for base64 encoded images directly in the json instead of the filename. They are 33% larger than their equivalent image file but enables you to have images with a single file.
481* Fixed a lint error about KeyPath visibility.
482* A few min/max progress bug fixes.
483* Prevent autoPlay from starting before the animation was attached to the window. This caused animations in a RecyclerView to start playing before they were on screen.
484
485# 2.5.4
486* You can now call playAnimation() from onAnimationEnd
487* Min/Max frames are clipped to the composition start/end
488* setProgress takes into account start and end frame
489
490
491# 2.5.2
492### Features and Improvements
493* Totally new sample app!
494    * Rebuilt from the ground up.
495    * Lottiefiles integration
496    * Render times per layer
497    * Can open zip files with images from lottiefiles, even with qr scanning.
498    * Change speed
499# Bugs Fixed
500* Fixed a regression with ellipse direction
501
502# 2.5.1
503### Features and Improvements
504* Removed framerate restriction introduced in 2.5.0 that caused Lottie to attempt to render at the After Effects framerate. This caused animations to appear unexpectedly janky in most cases.
505### Bugs Fixed
506* Many minor bug fixes around setting min/max frames
507* Removed @RestrictTo on LottieValueCallback
508* Improved thread safety of animation listeners
509* Fixed looping when the animation speed is reversed
510
511
512# 2.5.0
513### Features and Improvements
514* Added the ability to dynamically change properties at runtime. See [docs](http://airbnb.io/lottie/android/dynamic.html) for more info. This feature removed the existing APIs for
515changing the color dynamically with a color filter. Refer to the docs for migration info from
516existing ColorFilter APIs.
517* Added a setRepeatMode and setRepeatCount (Thanks Fabio Nuno!).
518* Completely overhauled json deserialization. Deserializing a composition takes half as long and
519can deserialize much larger json files (tested 50mb) without ooming.
520* Overhauled the underlying time animator. It now:
521    * More accurately handles setFrame/getFrame/minFrame/maxFrame APIs. There were cases where they
522    could be off by one before.
523    * Renders at the fps specified by After Effects.
524    * Added docs and clearer rules around animatedValue and animatedFraction in animator callbacks.
525* API to remove all animator listeners.
526* Adhere to the Animatable interface.
527* Bumped the minSdk from 14 to 16 to use Choreographer in the animator mentioned above.
528### Bugs Fixed
529* Fixed a bug that made it difficult to chain animations in onAnimationEnd callbacks.
530* Fixed a regression with unknown masks modes.
531* Fixed a crash trying to recycle a null bitmap.
532* Fixed a bug when an opacity animation time interpolator was >1.
533
534# 2.3.1
535### Features and Improvements
536* Expose `LottieComposition#getImages()` to aid in preloading images.
537* Added support for text baseline.
538### Bugs Fixed
539* Prevented a crash when setting min frame > previous max frame.
540* Fixed some bugs in subtract masks.
541* Fixed some animation clamping when an animation was longer than its parent and time stretched.
542* Stopped applying time stretch to a layer transform.
543
544
545# 2.3.0
546### Features and Improvements
547* Animator fixes:
548    * Previously, some usages of lottie animator apis/api listeners would cause unexpected
549    behavior, especially calling apis from listener callbacks.
550    * This is breaking change if you use `playAnimation(start, end)`. It has been removed in
551    favor of explicit methods for `setMinFrame/Progress`, `setMaxFrame/Progress` and
552    `setMinAndMaxFrame/Progress` followed by an explicit call to `playAnimation` or
553    `resumeAnimation`.
554    * `reverseAnimation` and `resumeReverseAnimation` apis have been removed in favor of
555    `play` and `resume` with `speed` < 0.
556    * If you have created hack around these limitations or complex animator chaining, please test
557     your animations after updating.
558* Set an animation from R.raw (res/raw) if you want static references to your animation files.
559This can help prevent mismatches between api calls and file names. Thanks @cyrilmottier!
560* Support for ellipse direction.
561* Expose image directory name if set from bodymovin.
562### Bugs Fixed
563* Fixed a bug with animations that use both mattes and time stretch.
564* Fixed a few keyframe issues where keyframe start/end values would be off by 1 frame.
565
566# 2.2.5
567### Bugs Fixed
568* Call onAnimationEnd when system animations are disabled.
569
570# 2.2.4
571### Bugs Fixed
572* Improved the reliability of scaling and using ImageView scale types.
573* Fixed a clipping issue with precomps.
574* Fixed an ArrayIndexOutOfBounds crash in the interpolator cache.
575
576# 2.2.3
577### Bugs Fixed
578* Fixed some issues with progress and resume
579* Fixed a StackOverflowErrors when animations are disabled
580* Fixed a NPE in Keyframe.Factory
581
582# 2.2.1
583### Features and Improvements
584* Text now supports opacity.
585### Bugs Fixed
586* Fixed a couple of couple of concurrency crashes.
587* Fixed a crash when animations are disabled.
588* Fixed a crash for letters with no shapes.
589
590
591# 2.2.0
592### Features and Improvements
593* Added `play(startFrame, endFrame)` and `play(startProgress, endProgress)`.
594* Added the ability to set a minimum and maximum frame/progress for a given animation.
595* Made WeakRef the default cache strategy.
596### Bugs Fixed
597* Cancel loading animations when non-Lottie animations are set.
598
599# 2.1.2
600### Bugs Fixed
601* Reduced memory footprint.
602* Allowed animations with masks and mattes to scale larger than their view.
603* Respect hardware acceleration when async loading a composition.
604* Fixed a gradient point counting issue.
605* Fixed a trim path issue.
606
607# 2.1.0
608### Features and Improvements
609* Added support for animated text (glyphs and fonts)
610* Enabled text to be set dynamically
611* Added support for repeaters
612* Added support for time stretching
613* Added support for work area (trimming start and end frames)
614* Added support for mask opacity
615* Migrated the sample app to Kotlin
616* Added a real time render performance graph in the sample app
617* Added many systrace markers to improve performance tracking
618
619# 2.0.0
620### Features and Improvements
621* Increased version number.
622* New animations from lottiefiles in the sample app.
623### Bugs Fixed
624* Minor trim path fix.
625* Minor gradient caching fix.
626
627# 2.0.0-rc2
628### Features and Improvements
629* Paste json into the sample app.
630* Update a bitmap asset dynamically.
631* Set scale from xml.
632### Bugs Fixed
633* Resume no longer restarts the animation.
634* More lenient crashes and getCallback() checks.
635* Fewer addUpdateListener calls.
636* Fix cache strategy when it and the animation is set from xml.
637
638# 2.0.0-rc1
639### Features and Improvements
640* Set a color filter with xml
641#### Bugs Fixed
642* Prevent a rare crash when used from React Native.
643* Apply transformation to gradient fills.
644* Clip precomps to their bounds.
645* Prevent a crash with certain extreme keyframe values.
646* Fix the sample app for pre-lollipop.
647* Fix some pre-lollipop rendering bugs.
648
649
650# 2.0.0-beta4
651### Features and Improvements
652* Added support to load an animation by scanning a qr code with a url to the json. All
653lottiefiles.com animations now have qr codes.
654* Added support for opacity stops in gradients.
655* Exposed setScale to arbitrarily scale up or down an animation. Added a slider in Lottie Sample
656to try it.
657
658#### Bugs Fixed
659* Fixed several subtle trim path and dash pattern bugs.
660* Fixed a bug with path animations on Jelly Bean.
661* Fixed a bug that would incorrectly draw rounded rectangles.
662
663# 2.0.0-beta3
664#### Features and Improvements
665* Ground up rewrite of the rendering engine.
666* Vastly improved the performance of masks and mattes.
667* Support for fill types (non-zero or even-odd).
668* Support for gradient fills.
669* Some merge path support. Enable it with `enableMergePathsForKitKatAndAbove` and read the
670documentation before using it.
671* Support for multiple fills and strokes on shapes.
672* Exposed several package private methods on `LottieAnimationView` and `LottieDrawable`
673* Better support for hardware acceleration.
674* Added a ton of samples from lottiefiles.com to the sample app.
675
676#### Bugs Fixed
677* Invalidate whatever drawable is set as the image drawable even if it's not LottieDrawable.
678
679# 1.5.3
680#### Features and Improvements
681* Added an image asset delegate so you can provide your own bitmaps from and sd card, for example.
682* Added an attr for setting progress.
683* Improved the performance of very large compositions by scaling them down to the screen size.
684* Separate APIs for play/cancel with or without setting progress.
685
686#### Bugs Fixed
687* Several issues that could cause graphical corruption in masks or mattes.
688* LottieAnimationView checks whether it's current drawable is LottieDrawable for some calls.
689
690
691# 1.5.2
692#### Features and Improvements
693* Significantly improved memory usage when using masks or mattes. No more bitmaps!
694#### Bugs Fixed
695* Further improved the compatibility of masks and mattes.
696
697# 1.5.1
698##### Features and Improvements
699* Use a thread pool executor for deserialization.
700* Allow setting a default cache strategy
701* Drop repeated calls to setComposition with the same composition.
702##### Bugs Fixed
703* Fixed an image scaling issue.
704* Fixed a crash when leaving a screen with an image animation.
705* Fixed a crash when the json has no assets.
706
707# 1.5.0
708* Precomps.
709* 60% performance and memory improvement for masks and mattes.
710* Images support. See documentation for more information.
711* Polystars.
712* Polygons.
713* Alpha inverted masks.
714* Subtract masks.
715* Trim paths on rectangles.
716* Variable speed (positive or negative).
717* Improved color interpolation (rgb -> gamma color space).
718
719# 1.0.3
720* Make `LottieDrawable` public again.
721* Apply trim paths to shape fills.
722* Expose reverseAnimation in addition to playAnimation.
723
724# 1.0.2
725* Added support for split dimension positions.
726* Fixed a crash with decimal opacity values.
727* Allow trim paths to rotate indefinitely.
728* Lowered the minSdk to 14 (ICS).
729* Prevent multiple caches from created on different threads.
730* Allow animations to show final state when system animations are disabled.
731
732# 1.0.1 (2/2/2017)
733* Fixes an issue in which a parent layer will overwrite child alpha.
734* Fixes drawable invalidation when `LottieDrawable` is used outside of `LottieAnimationView`
735
736# 1.0 (01/30/2017)
737
738* Initial release
739