package Ġapp . ath ome . main . util Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġapp . ath ome . main . R Ċ Ċ class ĠLoading View ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull ) Ġ: ĠView ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ ANIM ATION _ DURATION Ġ= Ġ 2 5 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ NUM _ DOT S Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ CIR CLE _ COLOR Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ CIR CLE _ RADIUS Ġ= Ġ 2 4 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ CIR CLE _ SPACING Ġ= Ġ 1 0 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ CIR CLE _ TR AV EL Ġ= Ġ 3 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġanim ator Set : ĠAn imator Set Ġ= ĠAn imator Set () ĊĠĠĠ Ġprivate Ġval Ġdots Ġ= Ġarray ListOf < Dot >() ĊĠĠĠ Ġprivate Ġval Ġpaint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĊĠĠĠ Ġvar Ġcircle Radius Ġ= ĠDEFAULT _ CIR CLE _ RADIUS ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcircle Spacing Ġ= ĠDEFAULT _ CIR CLE _ SPACING ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcircle Travel Ġ= ĠDEFAULT _ CIR CLE _ TR AV EL ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġanimation Duration Ġ= ĠDEFAULT _ ANIM ATION _ DURATION ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Animation Duration Ġ= Ġanimation Duration Ġ/ Ġnum Dot s ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcircle Color Ġ= ĠDEFAULT _ CIR CLE _ COLOR ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġnum Dot s Ġ= ĠDEFAULT _ NUM _ DOT S ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Animation Duration Ġ= Ġanimation Duration Ġ/ Ġnum Dot s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Dot s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdot Animation Duration : ĠInt ĊĠĠĠ Ġprivate Ġval Ġcalculated Height : ĠInt ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattr Set Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Loading View ) ĊĠĠĠĠĠĠĠ Ġwith ( attr Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Radius Ġ= Ġget Dimension ( R . style able . Loading View _ circle Radius , ĠDEFAULT _ CIR CLE _ RADIUS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Spacing Ġ= Ġget Dimension ( R . style able . Loading View _ circle Spacing , ĠDEFAULT _ CIR CLE _ SPACING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Travel Ġ= Ġget Dimension ( R . style able . Loading View _ circle Travel , ĠDEFAULT _ CIR CLE _ TR AV EL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Color Ġ= Ġget Color ( R . style able . Loading View _ circle Color , ĠDEFAULT _ CIR CLE _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Dot s Ġ= Ġget Int ( R . style able . Loading View _ num Dot s , ĠDEFAULT _ NUM _ DOT S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Duration Ġ= Ġget Int ( R . style able . Loading View _ animation Duration , ĠDEFAULT _ ANIM ATION _ DURATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Animation Duration Ġ= Ġanimation Duration Ġ/ Ġnum Dot s ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcalculated Height Ġ= Ġ( circle Radius Ġ* Ġ 2 Ġ+ Ġcircle Travel ). toInt () ĊĠĠĠĠĠĠĠ Ġinit Dot s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġdots . forEach Ġ{ Ġit . draw ( canvas , Ġpaint ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalculated Width Ġ= Ġ( dots . last (). x Ġ+ Ġcircle Radius ). toInt () ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( calculated Width , Ġcalculated Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġanim ator Set . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Visibility ( visibility : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setVisibility ( visibility ) ĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ== ĠVIS IBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Set . start () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator Set . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdots . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ!= ĠVIS IBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ!= ĠG ONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Dot s () Ġ{ ĊĠĠĠĠĠĠĠ Ġdots . clear () ĊĠĠĠĠĠĠĠ Ġval Ġstart Y Ġ= Ġcalculated Height Ġ- Ġcircle Radius ĊĠĠĠĠĠĠĠ Ġvar Ġdot X Ġ= Ġcircle Radius ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum Dot s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdots . add ( Dot ( dot X , Ġstart Y , Ġcircle Radius )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot X Ġ+= Ġcircle Spacing Ġ+ Ġ( circle Radius Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Anim ators () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Anim ators () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstar Offset Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġval Ġanim ators Ġ= Ġarray ListOf < Value Animator >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum Dot s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdot Ġ= Ġdots [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ators . add ( Value Animator . of Float ( dot . y , Ġcircle Radius , Ġdot . y ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ( dot Animation Duration Ġ* Ġ 0 . 8 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Delay Ġ= Ġstar Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstar Offset Ġ+= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot . y Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanim ator Set . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay To gether ( anim ators Ġas ĠCollection < Animator > ?) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠDot ( var Ġx : ĠFloat , Ġvar Ġy : ĠFloat , Ġvar Ġradius : ĠFloat ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart X : ĠFloat Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstart Y : ĠFloat Ġ= Ġy ĊĊĠĠĠĠĠĠĠ Ġfun Ġdraw ( canvas : ĠCanvas ?, Ġpaint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( x , Ġy , Ġradius , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġstart X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġstart Y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ