package Ġcom . robert lev ony an . views . custom floating action button Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Property Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġjava . util .* Ċ Ċ class ĠFloating Layout Ġ: ĠFrame Layout Ġ{ ĊĠĠĠ Ġvar Ġfab Animation Style Ġ= ĠF ab Menu Animation . ANIM ATION _ POP _ UP ĊĠĠĠ Ġvar Ġfab Animate Menu Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġfab Menu Gravity Ġ= ĠGr avity . TOP ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild View () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġfab Animate Duration Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild View () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Anim ating Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Expanded Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġviews Ġ= ĠArrayList < View >() ĊĊĠĠĠ Ġvar Ġon Menu Expanded Listener : ĠOn Menu Expanded Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull , Ġ 0 ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġattrs ?. let Ġ{ Ġinit Typed Array ( it ) Ġ} Ġ?: Ġinit Default Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Typed Array ( attrs : ĠAttributeSet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġta Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Floating ActionButton , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġfab Animation Style Ġ= ĠF ab Menu Animation . getBy Index ( ta . getInt ( R . style able . Floating ActionButton _ fab Menu Style , ĠF ab Menu Animation . ANIM ATION _ POP _ UP . ordinal )) ĊĠĠĠĠĠĠĠ Ġfab Menu Gravity Ġ= Ġta . getInt ( R . style able . Floating ActionButton _ android _ gravity , ĠGr avity . TOP ) ĊĠĠĠĠĠĠĠ Ġfab Animate Menu Ġ= Ġta . getBoolean ( R . style able . Floating ActionButton _ fab Animate Menu , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfab Animate Duration Ġ= Ġta . getInt ( R . style able . Floating ActionButton _ fab Animate Duration , Ġ 3 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġta . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Default Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġfab Animation Style Ġ= ĠF ab Menu Animation . ANIM ATION _ POP _ UP ĊĠĠĠĠĠĠĠ Ġfab Menu Gravity Ġ= ĠGr avity . TOP ĊĠĠĠĠĠĠĠ Ġfab Animate Menu Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfab Animate Duration Ġ= Ġ 3 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġcreate View Stack () ĊĠĠĠĠĠĠĠ Ġcreate Margins () ĊĠĠĠĠĠĠĠ Ġcreate Animations () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĠĠĠĠĠĠĠ Ġbuild View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate View Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ]?. let Ġ{ Ġchild View Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child View Ġis ĠFloating ActionButton Ġ|| Ġchild View Ġis Ġcom . google . android . material . floating action button . Floating ActionButton ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( child View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloating ActionButton Ġ-> Ġchild View . fab Elevation Ġ= Ġ 1 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġcom . google . android . material . floating action button . Floating ActionButton Ġ-> Ġchild View . compat Elevation Ġ= Ġ 1 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( child View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloating ActionButton Ġ-> Ġchild View . fab Elevation Ġ= Ġ 9 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġcom . google . android . material . floating action button . Floating ActionButton Ġ-> Ġchild View . compat Elevation Ġ= Ġ 9 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild View . layout Params Ġ= Ġ( child View . layout Params Ġas ĠLayout Params ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= Ġfab Menu Gravity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . add ( child View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove View ( child View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Margins () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( views . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġviews . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġit . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠFloating ActionButton ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmargin Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . default _ margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . fab Size Ġ== ĠF ab Size . FAB _ SIZE _ NORMAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . set Margins ( margin , Ġmargin , Ġmargin , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmargin Form Mini Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . default _ margin _ for _ mini ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( fab Animation Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ DOWN Ġ-> Ġlp . set Margins ( margin Form Mini , Ġmargin , Ġmargin Form Mini , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ RIGHT Ġ-> Ġlp . set Margins ( margin , Ġmargin Form Mini , Ġmargin , Ġmargin Form Mini ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ LEFT Ġ-> Ġlp . set Margins ( margin , Ġmargin Form Mini , Ġmargin , Ġmargin Form Mini ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlp . set Margins ( margin Form Mini , Ġmargin , Ġmargin Form Mini , Ġmargin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Animations () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( views . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġviews [ 0 ]. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Anim ating ) Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Expanded ) Ġcollapse () Ġelse Ġexpand () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollapse () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( fab Animation Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ LEFT Ġ-> Ġcollapse Direction ( View . TRANSL ATION _ X , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ UP Ġ-> Ġcollapse Direction ( View . TRANSL ATION _ Y , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ RIGHT Ġ-> Ġcollapse Direction ( View . TRANSL ATION _ X , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ DOWN Ġ-> Ġcollapse Direction ( View . TRANSL ATION _ Y , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fab Animate Menu ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( views [ 0 ], ĠView . ROT ATION , Ġ 4 5 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġduration Ġ= Ġfab Animate Duration . to Long () Ġ}. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollapse Direction ( view Property : ĠProperty < View , ĠFloat >, Ġdirection Factor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Anim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġanim ators Ġ= ĠArrayList < Animator >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġviews . size Ġ- Ġ 1 Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġviews [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Size Ġ= Ġ 1 6 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Animator Ġ= ĠObject Animator . of Float ( view , Ġview Property , Ġdirection Factor Ġ* Ġi Ġ* Ġanimation Size , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ators . add ( view Animator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAn imator Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġfab Animate Duration . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Anim ating Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Expanded Ġ= Ġ! is Expanded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Menu Expanded Listener ?. on Menu Collapsed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Se quent ially ( anim ators ) ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpand () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( fab Animation Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ LEFT Ġ-> Ġexpand Direction ( View . TRANSL ATION _ X , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ UP Ġ-> Ġexpand Direction ( View . TRANSL ATION _ Y , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ RIGHT Ġ-> Ġexpand Direction ( View . TRANSL ATION _ X , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ab Menu Animation . ANIM ATION _ POP _ DOWN Ġ-> Ġexpand Direction ( View . TRANSL ATION _ Y , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fab Animate Menu ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( views [ 0 ], ĠView . ROT ATION , Ġ 0 f , Ġ 4 5 f ). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpand Direction ( view Property : ĠProperty < View , ĠFloat >, Ġdirection Factor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Anim ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġanim ators Ġ= ĠArrayList < Animator >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġviews . size Ġ- Ġ 1 Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġviews [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Size Ġ= Ġ 1 6 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Animator Ġ= ĠObject Animator . of Float ( view , Ġview Property , Ġ 0 f , Ġdirection Factor Ġ* Ġi Ġ* Ġanimation Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Start ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ators . add ( view Animator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAn imator Set (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġfab Animate Duration . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Anim ating Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Expanded Ġ= Ġ! is Expanded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Menu Expanded Listener ?. on Menu Expanded () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Se quent ially ( anim ators ) ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Menu Expanded Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Menu Expanded () ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Menu Collapsed () ĊĠĠĠ Ġ} Ċ }