package Ġcom . fal ten re ich . skeleton layout . mask Ċ Ċ import Ġandroid . graphics . Linear Gradient Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Shader Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġcom . fal ten re ich . skeleton layout . is Attached To Window Compat Ċ import Ġcom . fal ten re ich . skeleton layout . refresh Rate InSeconds Ċ Ċ internal Ġclass ĠS keleton Mask Sh im mer ( ĊĠĠĠ Ġparent : ĠView , ĊĠĠĠ Ġ@ Color Int Ġmask Color : ĠInt , ĊĠĠĠ Ġ@ Color Int Ġvar Ġshim mer Color : ĠInt , ĊĠĠĠ Ġvar Ġduration In Millis : ĠLong Ċ ) Ġ: ĠS keleton Mask ( parent , Ġmask Color ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrefresh Interval In Millis : ĠLong Ġby Ġlazy Ġ{ Ġ(( 1 0 0 0 f Ġ/ Ġparent . context . refresh Rate InSeconds ()) Ġ* Ġ. 9 f ). to Long () Ġ} ĊĠĠĠ Ġprivate Ġval Ġwidth : ĠFloat Ġ= Ġparent . width . toFloat () ĊĠĠĠ Ġprivate Ġval Ġmatrix : ĠMatrix Ġ= ĠMatrix () ĊĊĠĠĠ Ġprivate Ġvar Ġanimation : ĠHandler ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġanimation Task : ĠRunnable ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . is Attached To Window Compat () Ġ&& Ġparent . visibility Ġ== ĠView . VISIBLE Ġ-> Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( animation Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Ġ= ĠHandler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Task Ġ= Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Sh im mer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation ?. post Delayed ( this , Ġrefresh Interval In Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation ?. post ( animation Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation ?. remove Callbacks ( animation Task ) ĊĠĠĠĠĠĠĠ Ġanimation Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Paint () Ġ= ĠPaint (). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . shader Ġ= ĠLinear Gradient ( 0 f , Ġ 0 f , Ġwidth , Ġ 0 f , Ġint ArrayOf ( color , Ġshim mer Color , Ġcolor ), Ġnull , ĠShader . Tile Mode . CLAMP ) ĊĠĠĠĠĠĠĠ Ġit . is Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠProgress Ġis Ġtime - dependent Ġto Ġsupport Ġsynchronization Ġbetween Ġun coup led Ġviews ĊĠĠĠ Ġprivate Ġfun Ġcurrent Progress (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmillis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= Ġmillis . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġduration In Millis ĊĠĠĠĠĠĠĠ Ġval Ġdivisor Ġ= ĠMath . floor ( current Ġ/ Ġinterval ) ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġinterval Ġ* Ġdivisor ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġstart Ġ+ Ġinterval ĊĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġ( current Ġ- Ġstart ) Ġ/ Ġ( end Ġ- Ġstart ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpercentage . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcurrent Offset (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġcurrent Progress () ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġwidth Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġ- offset ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġwidth Ġ+ Ġoffset ĊĠĠĠĠĠĠĠ Ġreturn Ġprogress Ġ* Ġ( max Ġ- Ġmin ) Ġ+ Ġmin ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Sh im mer () Ġ{ ĊĠĠĠĠĠĠĠ Ġmatrix . set Translate ( current Offset (), Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġpaint . shader . set Local Matrix ( matrix ) ĊĠĠĠĠĠĠĠ Ġparent . invalidate () ĊĠĠĠ Ġ} Ċ }