/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 , ĠAlibaba ĠGroup ĠHold ing ĠLimited ; Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . alibaba . g ai ax . adapter Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Absolute Layout Ċ import Ġcom . air bnb . lott ie . Lot tie Animation View Ċ import Ġcom . air bnb . lott ie . Lot tie Composition Ċ import Ġcom . air bnb . lott ie . Lot tie Composition Factory Ċ import Ġcom . air bnb . lott ie . Lot tie Listener Ċ import Ġcom . alibaba . fastjson . JSONObject Ċ import Ġcom . alibaba . g ai ax . GX Template Engine Ċ import Ġcom . alibaba . g ai ax . context . GX Template Context Ċ import Ġcom . alibaba . g ai ax . render . node . GX Node Ċ import Ġcom . alibaba . g ai ax . template . GX I Expression Ċ import Ġcom . alibaba . g ai ax . template . animation . GX Default Animator Listener Ċ import Ġcom . alibaba . g ai ax . template . animation . G XL ot tie Animation Ċ import Ġcom . alibaba . g ai ax . template . factory . GX Expression Factory Ċ import Ġcom . alibaba . g ai ax . utils . setValue Ext Ċ Ċ class ĠG X Adapter Lot tie Animation Ġ: ĠG XL ot tie Animation () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġexecute Animation ( ĊĠĠĠĠĠĠĠ Ġgx State : ĠG XI Expression ?, ĊĠĠĠĠĠĠĠ Ġgx Animation Expression : ĠG XI Expression ?, ĊĠĠĠĠĠĠĠ Ġgx Template Context : ĠG X Template Context , ĊĠĠĠĠĠĠĠ Ġgx Node : ĠG X Node , ĊĠĠĠĠĠĠĠ Ġgx Template Data : ĠJSONObject ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlo tt ie Container Ġ= Ġ( gx Node . view Ġas ? ĠViewGroup ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġgx Animation Data Ġ= Ġgx Animation Expression ?. value ( gx Template Data ) Ġas ? ĠJSONObject ĊĊĠĠĠĠĠĠĠ Ġval Ġremote Uri Ġ= Ġthis . gx Remote Uri ?. value ( gx Template Data ) Ġas ? ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( remote Uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Play ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Animation Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlocal Uri Ġ= Ġthis . gx Local Uri ?. value ( gx Template Data ) Ġas ? ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( local Uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Play ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Animation Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlocal Append Json ( value : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull Ġ&& Ġ! value . endsWith (". json ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ value . json " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlocal Create Lot tie View ( context : ĠContext ): ĠL ot tie Animation View Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlo tt ie View : ĠL ot tie Animation View Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . g ai ax _ inner _ lott ie _ auto _ play , Ġnull ) Ġas ĠL ot tie Animation View ĊĠĠĠĠĠĠĠ Ġlo tt ie View . layout Params Ġ= ĠAbsolute Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAbsolute Layout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAbsolute Layout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlocal Init Lot tie Local Resource Dir ( value : ĠString , Ġlo tt ie View : ĠL ot tie Animation View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Index Ġ= Ġvalue . indexOf ("/") ĊĠĠĠĠĠĠĠ Ġif Ġ( dir Index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġvalue . substring ( 0 , Ġdir Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dir . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . image Assets Folder Ġ= Ġ"$ dir / images /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlocal Play ( ĊĠĠĠĠĠĠĠ Ġlo tt ie Container : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġgx Template Context : ĠG X Template Context , ĊĠĠĠĠĠĠĠ Ġgx Node : ĠG X Node , ĊĠĠĠĠĠĠĠ Ġgx Template Data : ĠJSONObject , ĊĠĠĠĠĠĠĠ Ġgx State : ĠG XI Expression ?, ĊĠĠĠĠĠĠĠ Ġgx Animation Data : ĠJSONObject ?, ĊĠĠĠĠĠĠĠ Ġlocal Uri : ĠString , ĊĠĠĠĠĠĠĠ Ġloop Count : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlo tt ie View : ĠL ot tie Animation View ? Ġ= Ġif Ġ( lott ie Container . child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Create Lot tie View ( lott ie Container . context ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container . getChild At ( 0 ) Ġas ? ĠL ot tie Animation View ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lott ie View ?. is Anim ating Ġ== Ġtrue Ġ|| Ġgx Node . is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lott ie View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlocal Init Lot tie Local Resource Dir ( local Uri , Ġlo tt ie View ) ĊĊĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Animator Listeners () ĊĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Update Listeners () ĊĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Lot tie On Composition Loaded Listener () ĊĊĠĠĠĠĠĠĠ Ġlo tt ie View . set Animation ( local Append Json ( local Uri )) ĊĠĠĠĠĠĠĠ Ġlo tt ie View . repeat Count Ġ= Ġloop Count ĊĠĠĠĠĠĠĠ Ġlo tt ie View . add Animator Listener ( object Ġ: ĠG X Default Animator Listener () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Node . is Anim ating Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Animator Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Update Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Lot tie On Composition Loaded Listener () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . progress Ġ= Ġ 1 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG X Expression Factory . value Path ( gx State ?. expression ()) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Data . setValue Ext ( it , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Context . template Data ?. event Listener ?. on Animation Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG X Template Engine . GX Animation (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġ" END " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . nodeId Ġ= Ġgx Node . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view Ġ= Ġlo tt ie View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . animation Params Ġ= Ġgx Animation Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Context . template Data ?. event Listener ?. on Animation Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG X Template Engine . GX Animation (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġ" START " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . nodeId Ġ= Ġgx Node . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view Ġ= Ġlo tt ie View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . animation Params Ġ= Ġgx Animation Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġlo tt ie View . play Animation () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lott ie Container . child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container . addView ( lott ie View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremote Create Lot tie View ( context : ĠContext ): ĠL ot tie Animation View Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlo tt ie View : ĠL ot tie Animation View Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . g ai ax _ inner _ lott ie _ auto _ play , Ġnull ) Ġas ĠL ot tie Animation View ĊĠĠĠĠĠĠĠ Ġlo tt ie View . layout Params Ġ= ĠAbsolute Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAbsolute Layout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAbsolute Layout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlo tt ie View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremote Play ( ĊĠĠĠĠĠĠĠ Ġlo tt ie Container : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġgx Template Context : ĠG X Template Context , ĊĠĠĠĠĠĠĠ Ġgx Node : ĠG X Node , ĊĠĠĠĠĠĠĠ Ġgx Template Data : ĠJSONObject , ĊĠĠĠĠĠĠĠ Ġgx State : ĠG XI Expression ?, ĊĠĠĠĠĠĠĠ Ġgx Animation Data : ĠJSONObject ?, ĊĠĠĠĠĠĠĠ Ġremote Uri : ĠString , ĊĠĠĠĠĠĠĠ Ġloop Count : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlo tt ie View : ĠL ot tie Animation View ? Ġ= Ġif Ġ( lott ie Container . child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Create Lot tie View ( lott ie Container . context ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container . getChild At ( 0 ) Ġas ? ĠL ot tie Animation View ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lott ie View ?. is Anim ating Ġ== Ġtrue Ġ|| Ġgx Node . is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lott ie View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Animator Listeners () ĊĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Update Listeners () ĊĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Lot tie On Composition Loaded Listener () ĊĊĠĠĠĠĠĠĠ Ġgx Node . is Anim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġdownload Task Ġ= ĠL ot tie Composition Factory . from Url ( lott ie View . context , Ġremote Uri ) ĊĠĠĠĠĠĠĠ Ġdownload Task . addListener ( object Ġ: ĠL ot tie Listener < Lot tie Composition > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( composition : ĠL ot tie Composition ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Task . remove Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Node . is Anim ating Ġ= Ġcomposition Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomposition ?. let Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . set Composition ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . repeat Count Ġ= Ġloop Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . add Animator Listener ( object Ġ: ĠG X Default Animator Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Node . is Anim ating Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Animator Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Update Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . removeAll Lot tie On Composition Loaded Listener () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . progress Ġ= Ġ 1 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG X Expression Factory . value Path ( gx State ?. expression ()) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Data . setValue Ext ( it , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Context . template Data ?. event Listener ?. on Animation Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG X Template Engine . GX Animation (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġ" END " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . nodeId Ġ= Ġgx Node . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view Ġ= Ġlo tt ie View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . animation Params Ġ= Ġgx Animation Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Node . is Anim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgx Template Context . template Data ?. event Listener ?. on Animation Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG X Template Engine . GX Animation (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġ" START " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . nodeId Ġ= Ġgx Node . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view Ġ= Ġlo tt ie View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . animation Params Ġ= Ġgx Animation Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . play Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lott ie Container . child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie View . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo tt ie Container . addView ( lott ie View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }