package Ġlink . k 3 n . bo keh Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Time Interpolator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroid . view . animation . Accel erate Interpolator Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . widget . Relative Layout Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġk 3 ns uk 3 Ġon Ġ 2 0 1 7 / 0 7 / 2 9 . Ċ Ġ*/ Ċ Ċ class ĠBo keh Layout Ġ: ĠRelative Layout Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠINTER P _ LINEAR Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠINTER P _ AC CELER ATE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠINTER P _ DE CELER ATE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠINTER P _ AC CELER ATE _ DE CELER ATE Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ COUNT Ġ= Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ COLOR Ġ= ĠColor . arg b ( 1 5 0 , Ġ 1 0 0 , Ġ 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ DURATION : ĠLong Ġ= Ġ 1 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ INTER POL ATOR Ġ= ĠINTER P _ LINEAR ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Interpolator ( type : ĠInt ): ĠTime Interpolator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINTER P _ AC CELER ATE Ġ-> Ġreturn ĠAccel erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINTER P _ DE CELER ATE Ġ-> Ġreturn ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINTER P _ AC CELER ATE _ DE CELER ATE Ġ-> Ġreturn ĠAccel erate De cel erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĠLinear Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Count Ġ= ĠDEFAULT _ COUNT ĊĠĠĠ Ġprivate Ġvar Ġm Duration Ġ= ĠDEFAULT _ DURATION ĊĠĠĠ Ġprivate Ġvar Ġm Color Ġ= ĠDEFAULT _ COLOR ĊĠĠĠ Ġprivate Ġvar Ġm Interpolator Ġ= ĠDEFAULT _ INTER POL ATOR ĊĠĠĠ Ġprivate Ġval Ġm Bo keh List : ĠMutable List < Bo keh View > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġm Is Started Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġm Center X Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Center Y Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Radius Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġval Ġm Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġm Random Ġ= ĠRandom () ĊĊĠĠĠ Ġ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 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠPaint ĊĠĠĠĠĠĠĠ Ġm Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġm Color ĊĊĠĠĠĠĠĠĠ Ġbuild () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Started ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( m Bo keh List . size Ġ<= Ġ 0 ) Ġbuild () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Bo keh List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= Ġi Ġ* Ġm Duration Ġ/ Ġm Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bo keh List [ i ]. animate (). set Start Delay ( delay ). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Bo keh List . size Ġ<= Ġ 0 Ġ|| Ġ! m Is Started ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġm Bo keh List . forEach Ġ{ Ġit . animate (). cancel () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) Ġ- Ġpadding Left Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) Ġ- Ġpadding Top Ġ- Ġpadding Bottom ĊĊĠĠĠĠĠĠĠ Ġm Center X Ġ= Ġwidth Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġm Center Y Ġ= Ġheight Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġm Radius Ġ= ĠMath . min ( width , Ġheight ) Ġ* Ġ 0 . 5 f ĊĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop () ĊĊĠĠĠĠĠĠĠ Ġm Bo keh List . forEach Ġ{ Ġremove View ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġm Bo keh List . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= ĠLayout Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. m Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetup ĠView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbo keh View Ġ= ĠBo keh View ( context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbo keh View . scale X Ġ= Ġbo keh View . m Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbo keh View . scale Y Ġ= Ġbo keh View . m Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbo keh View . x Ġ= Ġm Random . next Float () Ġ* Ġ 5 0 0 f Ġ* Ġ( if ( m Random . next Boolean ()) Ġ 1 Ġelse Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbo keh View . y Ġ= Ġm Random . next Float () Ġ* Ġ 5 0 0 f Ġ* Ġ( if ( m Random . next Boolean ()) Ġ 1 Ġelse Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbo keh View . alpha Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( bo keh View , Ġ 0 , Ġlayout Params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= Ġi Ġ* Ġm Duration Ġ/ Ġm Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= Ġbo keh View . animate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . start Delay Ġ= Ġdelay ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . x ( m Random . next Float () Ġ* Ġ 5 0 0 f Ġ* Ġ( if ( m Random . next Boolean ()) Ġ 1 Ġelse Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . y ( m Random . next Float () Ġ* Ġ 5 0 0 f Ġ* Ġ( if ( m Random . next Boolean ()) Ġ 1 Ġelse Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . alpha ( m Random . next Float ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= Ġm Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . interpol ator Ġ= Ġcreate Interpolator ( m Interpolator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . set Listener ( m Animator Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bo keh List . add ( bo keh View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠ Ġbuild () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Started ) Ġstart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĊĠĠĠĠĠĠĠ Ġm Bo keh List . forEach Ġ{ Ġit . animate (). cancel () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠBo keh View ( context : ĠContext ) Ġ: ĠView ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġm Scale : ĠFloat Ġ= Ġ 0 . 5 f ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Scale Ġ= Ġm Random . next Float () Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( m Center X , Ġm Center Y , Ġm Radius , Ġm Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Animator Listener Ġ= Ġobject : ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Bo keh ", Ġ" on Animation Start ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Bo keh ", Ġ" on Animation End ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Bo keh List . size Ġ<= Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbo keh View Ġ= Ġm Bo keh List . remove At ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : ĠBo keh ĠãģĮ çĶ» éĿ¢ å¤ĸ ãģ« ç§» åĭķ ãģĹãģŁ éļ Ľ ãģ® åĩ¦çĲĨ ãĤĴ è¨ĺ è¿° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Edge Ġ= Ġtop Ġ+ Ġpadding Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Edge Ġ= Ġleft Ġ+ Ġpadding Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Edge Ġ= Ġright Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Edge Ġ= Ġbottom Ġ- Ġpadding Bottom ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= Ġbo keh View . animate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . x ( m Random . next Float () Ġ* Ġ 5 0 0 f Ġ* Ġ( if ( m Random . next Boolean ()) Ġ 1 Ġelse Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . y ( m Random . next Float () Ġ* Ġ 5 0 0 f Ġ* Ġ( if ( m Random . next Boolean ()) Ġ 1 Ġelse Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . alpha ( m Random . next Float ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= Ġm Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . interpol ator Ġ= Ġcreate Interpolator ( m Interpolator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . set Listener ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bo keh List . add ( bo keh View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ