package Ġeu . mic er . circ les loading indicator Ċ Ċ 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 . Animation Ċ import Ġandroid . view . animation . Linear Interpolator Ċ import Ġandroid . view . animation . Rotate Animation Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ Ċ class ĠCirc les Loading Indicator Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġvar Ġcircles Color : ĠInt ĊĠĠĠ Ġvar Ġcircles Count : ĠInt ĊĠĠĠ Ġvar Ġcircles Radius : ĠFloat ĊĠĠĠ Ġvar Ġrotation Duration : ĠInt ĊĠĠĠ Ġvar Ġshow Leading Line : ĠBoolean ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfirst Paint : ĠPaint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsecond Paint : ĠPaint ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Circ les Loading Indicator , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircles Count Ġ= Ġget Int ( R . style able . Circ les Loading Indicator _ circ les Count , Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircles Radius Ġ= Ġget Dimension ( R . style able . Circ les Loading Indicator _ circ les Radius , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircles Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . style able . Circ les Loading Indicator _ circ les Color , ĠColor . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Duration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Int ( R . style able . Circ les Loading Indicator _ rotation Duration , Ġ 3 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Leading Line Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Boolean ( R . style able . Circ les Loading Indicator _ show Leading Line , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstart Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĊĠĠĠĠĠĠĠ Ġfirst Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġfirst Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsecond Paint Ġ= ĠPaint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġsecond Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcircles Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Angle Ġ= Ġ- Math . PI Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter X Ġ= Ġwidth Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter Y Ġ= Ġheight Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Leading Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter X . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ/ Ġ 2 f Ġ- Ġcircles Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcircles Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġif Ġ( i Ġ== Ġ 0 ) Ġstart Angle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġstart Angle Ġ+ Ġ( i Ġ* Ġ(( 2 Ġ* ĠMath . PI ) Ġ/ Ġcircles Count )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġcenter X Ġ+ Ġcos ( angle ) Ġ* Ġ( width Ġ/ Ġ 2 f Ġ- Ġcircles Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġcenter Y Ġ+ Ġsin ( angle ) Ġ* Ġ( width Ġ/ Ġ 2 f Ġ- Ġcircles Radius ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x . toFloat (), Ġy . toFloat (), Ġcircles Radius , Ġsecond Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrotate Animation Ġ= ĠRotate Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 5 9 f , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ SELF , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ SELF , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġrotation Duration . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠLinear Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠAnimation . INF IN ITE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstart Animation ( rotate Animation ) ĊĠĠĠ Ġ} Ċ }