package Ġcom . m ids iz em ango . sw ifty draw . Animation Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠABC Ġon Ġ 1 2 / 3 0 / 2 0 1 7 . Ċ Ġ*/ Ċ import Ġandroid . animation . Time Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġcom . m ids iz em ango . sw ifty draw . R Ċ Ċ import Ġjava . util . Random Ċ Ċ /** Ċ Ġ* ĠContinuous Ġanimation Ġwhere Ġstars Ġslide Ġfrom Ġthe Ġbottom Ġto Ġthe Ġtop Ċ Ġ* ĠCreated Ġby ĠPat rick ĠI var sson Ġon Ġ 7 / 2 3 / 1 7 . Ċ Ġ*/ Ċ class ĠStar Animation View Ġ: ĠView Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm St ars Ġ= ĠarrayOf Null s < Star >( COUNT ) ĊĠĠĠ Ġprivate Ġval Ġm R nd Ġ= ĠRandom ( SEED . to Long ()) ĊĊĠĠĠ Ġprivate Ġvar Ġm Time Animator : ĠTime Animator ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Drawable : ĠDrawable ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Base Speed : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Base Size : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Play Time : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass Ġrepresenting Ġthe Ġstate Ġof Ġa Ġstar ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠStar Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġx : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġy : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġscale : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġalpha : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġspeed : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠView . View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠView . View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ see ĠView . View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Drawable Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . star ) ĊĠĠĠĠĠĠĠ Ġm Base Size Ġ= ĠMath . max ( m Drawable !!. intrinsic Width , Ġm Drawable !!. intrinsic Height ) Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġm Base Speed Ġ= ĠBASE _ SPEED _ DP _ PER _ S Ġ* Ġresources . display Metrics . density ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( width : ĠInt , Ġheight : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( width , Ġheight , Ġold w , Ġold h ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġstarting Ġposition Ġis Ġdependent Ġon Ġthe Ġsize Ġof Ġthe Ġview , ĊĠĠĠĠĠĠĠ Ġ// Ġwhich Ġis Ġwhy Ġthe Ġmodel Ġis Ġinitialized Ġhere , Ġwhen Ġthe Ġview Ġis Ġmeasured . ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm St ars . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstar Ġ= ĠStar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Star ( star , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm St ars [ i ] Ġ= Ġstar ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġfor Ġ( star Ġin Ġm St ars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġthe Ġstar Ġif Ġit 's Ġoutside Ġof Ġthe Ġview Ġbounds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstar Size Ġ= Ġstar !!. scale Ġ* Ġm Base Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( star . y Ġ+ Ġstar Size Ġ< Ġ 0 Ġ|| Ġstar . y Ġ- Ġstar Size Ġ> Ġview Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe Ġcurrent Ġcanvas Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Ġ= Ġcanvas . save () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove Ġthe Ġcanvas Ġto Ġthe Ġcenter Ġof Ġthe Ġstar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( star . x , Ġstar . y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRotate Ġthe Ġcanvas Ġbased Ġon Ġhow Ġfar Ġthe Ġstar Ġhas Ġmoved ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġ( star . y Ġ+ Ġstar Size ) Ġ/ Ġview Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . rotate ( 3 6 0 Ġ* Ġprogress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPrepare Ġthe Ġsize Ġand Ġalpha Ġof Ġthe Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠMath . round ( star Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drawable !!. setBounds (- size , Ġ- size , Ġsize , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drawable !!. alpha Ġ= ĠMath . round ( 2 5 5 Ġ* Ġstar . alpha ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġstar Ġto Ġthe Ġcanvas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drawable !!. draw ( canvas ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRestore Ġthe Ġcanvas Ġto Ġit 's Ġprevious Ġposition Ġand Ġrotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( save ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġm Time Animator Ġ= ĠTime Animator () ĊĠĠĠĠĠĠĠ Ġm Time Animator !!. setTime Listener ( Time Animator . Time Listener Ġ{ Ġanimation , Ġtotal Time , Ġdelta Time Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is La id Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġall Ġcalls Ġbefore Ġthe Ġview Ġhas Ġbeen Ġmeasured Ġand Ġla id Ġout . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Time Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( deltaTime . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm Time Animator !!. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġm Time Animator !!. cancel () ĊĠĠĠĠĠĠĠ Ġm Time Animator !!. setTime Listener ( null ) ĊĠĠĠĠĠĠĠ Ġm Time Animator !!. removeAll Listeners () ĊĠĠĠĠĠĠĠ Ġm Time Animator Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPause Ġthe Ġanimation Ġif Ġit 's Ġrunning ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Time Animator Ġ!= Ġnull Ġ&& Ġm Time Animator !!. isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStore Ġthe Ġcurrent Ġplay Ġtime Ġfor Ġlater . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Play Time Ġ= Ġm Time Animator !!. current Play Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Time Animator !!. pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠResume Ġthe Ġanimation Ġif Ġnot Ġalready Ġrunning ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresume () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Time Animator Ġ!= Ġnull Ġ&& Ġm Time Animator !!. is Paused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Time Animator !!. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhy Ġset Ġthe Ġcurrent Ġplay Ġtime ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTime Animator Ġuses Ġtimestamps Ġinternally Ġto Ġdetermine Ġthe Ġdelta Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġthe ĠTime Listener . ĠWhen Ġres umed , Ġthe Ġnext Ġdelta Ġreceived Ġwill Ġthe Ġwhole ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpause Ġduration , Ġwhich Ġmight Ġcause Ġa Ġhuge Ġj ank Ġin Ġthe Ġanimation . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBy Ġsetting Ġthe Ġcurrent Ġplay Ġtime , Ġit Ġwill Ġpick Ġof Ġwhere Ġit Ġleft Ġoff . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Time Animator !!. current Play Time Ġ= ĠmCurrent Play Time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProgress Ġthe Ġanimation Ġby Ġmoving Ġthe Ġstars Ġbased Ġon Ġthe Ġelapsed Ġtime ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta Ms Ġtime Ġdelta Ġsince Ġthe Ġlast Ġframe , Ġin Ġmillis ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate State ( delta Ms : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCon verting Ġto Ġseconds Ġsince ĠP X / S Ġconstants Ġare Ġeasier Ġto Ġunderstand ĊĠĠĠĠĠĠĠ Ġval Ġdelta Seconds Ġ= Ġdelta Ms Ġ/ Ġ 1 0 0 0 f ĊĠĠĠĠĠĠĠ Ġval Ġview Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġval Ġview Height Ġ= Ġheight ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( star Ġin Ġm St ars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove Ġthe Ġstar Ġbased Ġon Ġthe Ġelapsed Ġtime Ġand Ġit 's Ġspeed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstar !!. y Ġ-= Ġstar !!. speed Ġ* Ġdelta Seconds ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġstar Ġis Ġcompletely Ġoutside Ġof Ġthe Ġview Ġbounds Ġafter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdating Ġit 's Ġposition , Ġre cycle Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġstar . scale Ġ* Ġm Base Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( star . y Ġ+ Ġsize Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize Star ( star , Ġview Width , Ġview Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġthe Ġgiven Ġstar Ġby Ġrandom izing Ġit 's Ġposition , Ġscale Ġand Ġalpha ĊĠĠĠĠ Ġ* Ġ@ param Ġstar Ġthe Ġstar Ġto Ġinitialize ĊĠĠĠĠ Ġ* Ġ@ param Ġview Width Ġthe Ġview Ġwidth ĊĠĠĠĠ Ġ* Ġ@ param Ġview Height Ġthe Ġview Ġheight ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinitialize Star ( star : ĠStar , Ġview Width : ĠInt , Ġview Height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġscale Ġbased Ġon Ġa Ġmin Ġvalue Ġand Ġa Ġrandom Ġmultiplier ĊĠĠĠĠĠĠĠ Ġstar . scale Ġ= ĠSC ALE _ MIN _ PART Ġ+ ĠSC ALE _ RANDOM _ PART Ġ* Ġm R nd . next Float () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet ĠX Ġto Ġa Ġrandom Ġvalue Ġwithin Ġthe Ġwidth Ġof Ġthe Ġview ĊĠĠĠĠĠĠĠ Ġstar . x Ġ= Ġview Width Ġ* Ġm R nd . next Float () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe ĠY Ġposition ĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġat Ġthe Ġbottom Ġof Ġthe Ġview ĊĠĠĠĠĠĠĠ Ġstar . y Ġ= Ġview Height . toFloat () ĊĠĠĠĠĠĠĠ Ġ// ĠThe ĠY Ġvalue Ġis Ġin Ġthe Ġcenter Ġof Ġthe Ġstar , Ġadd Ġthe Ġsize ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġmake Ġsure Ġit Ġstarts Ġoutside Ġof Ġthe Ġview Ġbound ĊĠĠĠĠĠĠĠ Ġstar . y Ġ+= Ġstar . scale Ġ* Ġm Base Size ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġrandom Ġoffset Ġto Ġcreate Ġa Ġsmall Ġdelay Ġbefore Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġstar Ġappears Ġagain . ĊĠĠĠĠĠĠĠ Ġstar . y Ġ+= Ġview Height Ġ* Ġm R nd . next Float () Ġ/ Ġ 4 f ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġalpha Ġis Ġdetermined Ġby Ġthe Ġscale Ġof Ġthe Ġstar Ġand Ġa Ġrandom Ġmultiplier . ĊĠĠĠĠĠĠĠ Ġstar . alpha Ġ= ĠAL PH A _ SCALE _ PART Ġ* Ġstar . scale Ġ+ ĠAL PH A _ RANDOM _ PART Ġ* Ġm R nd . next Float () ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġbigger Ġand Ġbright er Ġa Ġstar Ġis , Ġthe Ġfaster Ġit Ġmoves ĊĠĠĠĠĠĠĠ Ġstar . speed Ġ= Ġm Base Speed Ġ* Ġstar . alpha Ġ* Ġstar . scale ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBASE _ SPEED _ DP _ PER _ S Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOUNT Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSE ED Ġ= Ġ 1 3 3 7 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġminimum Ġscale Ġof Ġa Ġstar Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC ALE _ MIN _ PART Ġ= Ġ 0 . 4 5 f ĊĠĠĠĠĠĠĠ Ġ/** ĠHow Ġmuch Ġof Ġthe Ġscale Ġthat 's Ġbased Ġon Ġrandom ness Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC ALE _ RANDOM _ PART Ġ= Ġ 0 . 5 5 f ĊĠĠĠĠĠĠĠ Ġ/** ĠHow Ġmuch Ġof Ġthe Ġalpha Ġthat 's Ġbased Ġon Ġthe Ġscale Ġof Ġthe Ġstar Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAL PH A _ SCALE _ PART Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ/** ĠHow Ġmuch Ġof Ġthe Ġalpha Ġthat 's Ġbased Ġon Ġrandom ness Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAL PH A _ RANDOM _ PART Ġ= Ġ 0 . 5 f ĊĠĠĠ Ġ} Ċ } Ċ