package Ġcom . z cp . wan Android . custom View Ċ Ċ 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 . view . View Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . annotation . Nullable Ċ import Ġandroidx . core . graphics . Color Utils Ċ import Ġcom . sc wang . smart . refresh . layout . api . Refresh Footer Ċ import Ġcom . sc wang . smart . refresh . layout . api . Refresh Layout Ċ import Ġcom . sc wang . smart . refresh . layout . constant . Spinner Style Ċ import Ġcom . sc wang . smart . refresh . layout . simple . Simple Component Ċ import Ġcom . sc wang . smart . refresh . layout . util . Smart Util Ċ import Ġcom . z cp . wan Android . R Ċ import Ġkotlin . math . min Ċ Ċ class ĠBall Pulse Footer Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġ@ Nullable Ġattrs : ĠAttributeSet ? Ġ= Ġnull Ċ ) Ġ: ĊĠĠĠ ĠSimple Component ( context , Ġattrs , Ġ 0 ), ĠRefresh Footer Ġ{ ĊĠĠĠ Ġ// < editor - fold Ġdesc =" å±ŀæĢ§ åıĺéĩı "> ĊĠĠĠ Ġprivate Ġvar Ġm Manual Normal Color Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Manual Animation Color Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Paint : ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġm Normal Color Ġ= Ġ- 0 x 1 1 1 1 1 2 ĊĠĠĠ Ġprivate Ġvar Ġm Anim ating Color Ġ= Ġ- 0 x 1 8 a 6 ba ĊĠĠĠ Ġprivate Ġvar Ġm Circle Spacing : ĠFloat ĊĠĠĠ Ġprivate Ġvar Ġm StartTime : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Is Started Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Interpolator : ĠTime Interpolator Ġ= ĠAccel erate De cel erate Interpolator () ĊĊĠĠĠ Ġ// </ editor - fold > ĊĠĠĠ Ġoverride Ġfun Ġdispatch Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthis View : ĠView Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġthis View . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġthis View . height ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġ( min ( width , Ġheight ) Ġ- Ġm Circle Spacing Ġ* Ġ 2 ) Ġ/ Ġ 6 ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġwidth Ġ/ Ġ 2 f Ġ- Ġ( radius Ġ* Ġ 2 Ġ+ Ġm Circle Spacing ) ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġheight Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġnow Ġ- Ġm StartTime Ġ- Ġ 1 2 0 Ġ* Ġ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpercent : ĠFloat Ġ= Ġif Ġ( time Ġ> Ġ 0 ) Ġtime Ġ% Ġ 7 5 0 Ġ/ Ġ 7 5 0 f Ġelse Ġ 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Ġ= Ġm Interpolator . get Interpolation ( percent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtranslateX Ġ= Ġx Ġ+ Ġradius Ġ* Ġ 2 Ġ* Ġi Ġ+ Ġm Circle Spacing Ġ* Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( translate X , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( percent Ġ< Ġ 0 . 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ 1 Ġ- Ġpercent Ġ* Ġ 2 Ġ* Ġ 0 . 7 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġpercent Ġ* Ġ 2 Ġ* Ġ 0 . 7 f Ġ- Ġ 0 . 4 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( 0 f , Ġ 0 f , Ġradius , Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . dispatch Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis View . invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" åĪ·æĸ° æĸ¹æ³ķ Ġ- ĠRefresh Footer "> ĊĠĠĠ Ġoverride Ġfun ĠonStart Animator ( ĊĠĠĠĠĠĠĠ Ġ@ NonNull Ġlayout : ĠRefresh Layout , ĊĠĠĠĠĠĠĠ Ġheight : ĠInt , ĊĠĠĠĠĠĠĠ Ġmax Drag Height : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Started ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġthis View : ĠView Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġthis View . invalidate () ĊĠĠĠĠĠĠĠ Ġm Is Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm StartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġm Anim ating Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish (@ NonNull Ġlayout : ĠRefresh Layout , Ġsuccess : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm StartTime Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġm Normal Color ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated ("") ĊĠĠĠ Ġoverride Ġfun Ġset Primary Colors (@ Color Int Ġvar arg Ġcolors : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Manual Animation Color Ġ&& Ġcolors . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Anim ating Color ( colors [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Manual Animation Color Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Manual Normal Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( colors . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Normal Color ( colors [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( colors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Normal Color ( Color Utils . composite Colors (- 0 x 6 6 0 0 0 0 0 1 , Ġcolors [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Manual Normal Color Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// </ editor - fold > ĊĠĠĠ Ġ// < editor - fold Ġdesc =" å¼Ģ æĶ¾ æİ¥åı£ Ġ- ĠAPI "> ĊĠĠĠ Ġfun Ġset Spinner Style ( m Spinner Style : ĠSp inner Style ?): ĠBall Pulse Footer Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Spinner Style Ġ= Ġm Spinner Style ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Normal Color (@ Color Int Ġcolor : ĠInt ): ĠBall Pulse Footer Ġ{ ĊĠĠĠĠĠĠĠ Ġm Normal Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġm Manual Normal Color Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Anim ating Color (@ Color Int Ġcolor : ĠInt ): ĠBall Pulse Footer Ġ{ ĊĠĠĠĠĠĠĠ Ġm Anim ating Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġm Manual Animation Color Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ġ// </ editor - fold > ĊĊĠĠĠ Ġ// </ editor - fold > ĊĠĠĠ Ġ// < editor - fold Ġdesc =" æŀĦéĢł æĸ¹æ³ķ "> ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthis View : ĠView Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġthis View . minimum Height Ġ= ĠSmart Util . dp 2 px ( 6 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġta Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Ball Pulse Footer ) ĊĠĠĠĠĠĠĠ Ġm Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġm Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Spinner Style Ġ= ĠSp inner Style . Translate ĊĠĠĠĠĠĠĠ Ġm Spinner Style Ġ= ĠSp inner Style . values [ ta . getInt ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Ball Pulse Footer _ srl Class ics Spinner Style , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Spinner Style . ordinal ĊĠĠĠĠĠĠĠ Ġ) ] ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Ball Pulse Footer _ srl Normal Color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Normal Color ( ta . getColor ( R . style able . Ball Pulse Footer _ srl Normal Color , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ta . hasValue ( R . style able . Ball Pulse Footer _ srl Anim ating Color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Anim ating Color ( ta . getColor ( R . style able . Ball Pulse Footer _ srl Anim ating Color , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġta . recycle () ĊĠĠĠĠĠĠĠ Ġm Circle Spacing Ġ= ĠSmart Util . dp 2 px ( 4 f ). toFloat () ĊĠĠĠ Ġ} Ċ }