package Ġcom . pro 2 on . ro bo animation Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Linear Interpolator Ċ Ċ /** Ċ Ġ* Ġ@ author ĠKon st ant in ĠCh up r yn a Ġon Ġ 4 / 5 / 1 9 . Ċ Ġ*/ Ċ Ċ class ĠRo bo Loader Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĊĊĠĠĠ Ġ// rec ĊĠĠĠ Ġprivate Ġvar Ġmain Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġrec One Ġ= ĠRect F ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠ Ġprivate Ġval Ġrec Two Ġ= ĠRect F ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠ Ġprivate Ġval Ġrec Three Ġ= ĠRect F ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĊĊĠĠĠ Ġprivate Ġvar Ġprogress Ġ= Ġ 0 F ĊĊĊĊĠĠĠ Ġprivate Ġval Ġmain Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġmain Color ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar Ġfraction Ġ= Ġ 0 F ĊĠĠĠ Ġprivate Ġvar Ġrectangle Size Ġ= Ġ 0 F ĊĠĠĠ Ġprivate Ġvar Ġhalf Fraction Ġ= Ġ 0 F ĊĊĊĠĠĠ Ġprivate Ġvar Ġauto Animation Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġis Anim ating Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġanim ator One Ġ= ĠValue Animator . of Float ( 0 . 0 f , Ġ 1 . 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 4 0 0 0 L ĊĊĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠValue Animator . INF IN ITE ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġattrs ?. let Ġ{ Ġretrieve Attributes ( attrs , Ġdef Style Attr ) Ġ} ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Animation Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Attributes ( attrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Ro bo Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdef Style Attr , ĠR . style . Base Ro bo Loader ) ĊĊĠĠĠĠĠĠĠ Ġmain Color Ġ= Ġtyped Array . getColor ( R . style able . Ro bo Loader _ android _ color , ĠColor . GRAY ) ĊĠĠĠĠĠĠĠ Ġmain Paint . color Ġ= Ġmain Color ĊĊĠĠĠĠĠĠĠ Ġauto Animation Ġ= Ġtyped Array . getBoolean ( R . style able . Ro bo Loader _ android _ enabled , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĊĠĠĠĠĠĠĠ Ġfraction Ġ= Ġ( width Ġ/ Ġ 7 ). toFloat () ĊĠĠĠĠĠĠĠ Ġrectangle Size Ġ= Ġfraction Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġhalf Fraction Ġ= Ġfraction Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġ// Ġwithout Ġchanging ĊĠĠĠĠĠĠĠ Ġrec One . bottom Ġ= Ġrectangle Size Ġ- Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec One . top Ġ= Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec One . right Ġ= Ġ 5 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec One . left Ġ= Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġrec Two . top Ġ= Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec Two . right Ġ= Ġ 1 3 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec Two . left Ġ= Ġ 9 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec Two . bottom Ġ= Ġ 5 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġrec Three . bottom Ġ= Ġ 1 3 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec Three . right Ġ= Ġ 1 3 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec Three . top Ġ= Ġ 9 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠ Ġrec Three . left Ġ= Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġmain Paint . stroke Width Ġ= Ġfraction ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( progress Ġ> Ġ 0 . 0 f Ġ&& Ġprogress Ġ<= Ġ 0 . 1 2 5 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= Ġ 8 Ġ* Ġprogress ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec One . right Ġ= Ġ 5 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec One . left Ġ= Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . right Ġ= Ġ 1 3 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . left Ġ= Ġ 9 Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . top Ġ= Ġhalf Fraction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . bottom Ġ= Ġ 5 Ġ* Ġhalf Fraction ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . bottom Ġ= Ġ 1 3 F Ġ* Ġhalf Fraction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . top Ġ= Ġ 9 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . right Ġ= Ġ 1 3 Ġ* Ġhalf Fraction Ġ- Ġlocal Progress Ġ* Ġ 8 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( progress Ġ> Ġ 0 . 1 2 5 Ġ&& Ġprogress Ġ<= Ġ 0 . 2 5 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġprevious Ġanimation Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . right Ġ= Ġ 5 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= Ġ 8 Ġ* Ġprogress Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . bottom Ġ= Ġ 5 Ġ* Ġhalf Fraction Ġ+ Ġlocal Progress Ġ* Ġ 8 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( progress Ġ> Ġ 0 . 2 5 Ġ&& Ġprogress Ġ<= Ġ 0 . 3 7 5 f ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġprevious Ġanimation Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . bottom Ġ= Ġ 1 3 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= Ġ 8 Ġ* Ġprogress Ġ- Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . top Ġ= Ġhalf Fraction Ġ+ Ġlocal Progress Ġ* Ġ 8 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( progress Ġ> Ġ 0 . 3 7 5 f Ġ&& Ġprogress Ġ<= Ġ 0 . 5 0 f ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġprevious Ġanimation Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . top Ġ= Ġ 9 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= Ġ 8 Ġ* Ġprogress Ġ- Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec One . right Ġ= Ġ 5 Ġ* Ġhalf Fraction Ġ+ Ġlocal Progress Ġ* Ġ 8 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( progress Ġ> Ġ 0 . 5 0 Ġ&& Ġprogress Ġ<= Ġ 0 . 6 2 5 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec One . right Ġ= Ġ 1 3 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= ĠĠ 8 Ġ* Ġprogress Ġ- Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec One . left Ġ= Ġhalf Fraction Ġ Ġ+ Ġlocal Progress Ġ* Ġ 8 Ġ* Ġhalf Fraction ĊĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( progress Ġ> Ġ 0 . 6 2 5 Ġ&& Ġprogress Ġ<= Ġ 0 . 7 5 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġprevious Ġanimation Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec One . left Ġ= Ġ 9 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= ĠĠ 8 Ġ* Ġprogress Ġ- Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . top Ġ= Ġ 9 Ġ* Ġhalf Fraction Ġ- Ġlocal Progress Ġ* Ġ 8 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( progress Ġ> Ġ 0 . 7 5 Ġ&& Ġprogress Ġ<= Ġ 0 . 8 7 5 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġprevious Ġanimation Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . top Ġ= Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= ĠĠ 8 Ġ* Ġprogress Ġ- Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . bottom Ġ= Ġ 1 3 Ġ* Ġhalf Fraction Ġ- Ġlocal Progress Ġ* Ġ 8 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( progress Ġ> Ġ 0 . 8 7 5 Ġ&& Ġprogress Ġ<= Ġ 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġprevious Ġanimation Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Three . bottom Ġ= Ġ 5 Ġ* Ġhalf Fraction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Progress Ġ= ĠĠ 8 Ġ* Ġprogress Ġ- Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrec Two . left Ġ= Ġ 8 Ġ* Ġhalf Fraction Ġ Ġ- Ġlocal Progress Ġ* Ġ 7 Ġ* Ġ Ġhalf Fraction ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Rect ( rec One , Ġmain Paint ) Ġ// Ġbox Ġ 2 ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Rect ( rec Two , Ġmain Paint ) Ġ// Ġbox Ġ 3 ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Rect ( rec Three , Ġmain Paint ) Ġ// Ġbox Ġ 1 ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( auto Animation Ġ&& Ġ! is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Animation () Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator One . end () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anim ating Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġstart Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ Ġanim ator One . start () ĊĠĠĠĠĠĠĠ Ġis Anim ating Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ Ċ }