/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 Ġal ire z ai y ann @ gmail . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġir . al ire z ai yan . progressbar Ċ Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . graphics . Color Utils Ċ import Ġir . al ire z ai yan . progressbar . utils . get Bound Rect F Ċ import Ġir . al ire z ai yan . progressbar . utils . getColor Ċ import Ġkotlin . math . min ĊĊ Ċ /** Ċ Ġ* Ġ@ author Ġali Ġ( al ire z ai y ann @ gmail . com ) Ċ Ġ* Ġ@ since Ġ 8 / 2 5 / 1 9 Ġ 1 0 : 2 9 ĠPM . Ċ Ġ*/ Ċ Ċ class ĠLevel ProgressBar Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ SPEED Ġ= Ġ 1 F ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ TEXT _ TITLE Ġ= Ġ" Level " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ START _ ANGLE Ġ= Ġ 1 2 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ TOTAL _ ANGLE Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ ST RO KE _ Wi D TH Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOP ACITY Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ MAX _ PROGRESS Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ TEXT _ LEVEL _ COLOR Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ TEXT _ TITLE _ COLOR Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ BACKGROUND _ COLOR Ġ= ĠColor . GREEN ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ UN PROGRESS _ COLOR Ġ= ĠColor . GRAY ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ IS _ ENABLE Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ IS _ STEP _ PROGRESS Ġ= Ġfalse ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcontinuous Swipe Angle Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġcontinuous Start Angle Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġspeed Ġ= ĠDEFAULT _ SPEED ĊĠĠĠ Ġprivate Ġvar Ġprogress Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġangle Ġ= Ġ 0 F ĊĠĠĠ Ġprivate Ġvar Ġtext Offset Ġ= Ġ 0 F ĊĊĠĠĠ Ġprivate Ġvar Ġtext Title : ĠString ? Ġ= ĠDEFAULT _ TEXT _ TITLE ĊĊĠĠĠ Ġprivate Ġvar Ġtext Level Color Ġ= ĠDEFAULT _ TEXT _ LEVEL _ COLOR ĊĠĠĠ Ġprivate Ġvar Ġtext Title Color Ġ= ĠDEFAULT _ TEXT _ TITLE _ COLOR ĊĠĠĠ Ġprivate Ġvar Ġprogress Color Ġ= ĠDEFAULT _ BACKGROUND _ COLOR ĊĠĠĠ Ġprivate Ġvar Ġun progress Color Ġ= ĠDEFAULT _ UN PROGRESS _ COLOR ĊĊĠĠĠ Ġprivate Ġvar Ġis Enable Ġ= ĠDEFAULT _ IS _ ENABLE ĊĠĠĠ Ġprivate Ġvar Ġis Step Progress Ġ= ĠDEFAULT _ IS _ STEP _ PROGRESS ĊĊĠĠĠ Ġprivate Ġvar Ġm Ready : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Setup Pending : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbitmap Shader : ĠBitmap Shader ĊĠĠĠ Ġprivate Ġvar Ġbitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Shader Matrix Ġ= ĠMatrix () ĊĠĠĠ Ġprivate Ġvar Ġbitmap Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġbitmap Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġdrawable Rect Ġ= ĠRect F () ĊĊĠĠĠ Ġprivate Ġvar Ġradius Ġ= Ġ 5 0 ĊĠĠĠ Ġvar ĠstrokeWidth Ġ= ĠDEFAULT _ ST RO KE _ Wi D TH . toFloat () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ< Ġradius Ġ/ Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġborder Rect Ġ= ĠRect F () ĊĊĠĠĠ Ġprivate Ġvar Ġprogress Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar Ġun Progress Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar Ġtext Level Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar Ġtext Title Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġbackground Paint Ġ= ĠPaint () ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġget Float ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ level , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ SPEED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Title Ġ= ĠgetString ( R . style able . Speed ProgressBar _ spb _ text _ title ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enable Ġ= Ġget Boolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ is _ enable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ IS _ ENABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Step Progress Ġ= Ġget Boolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ is _ step _ progress , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ IS _ ENABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Level Color Ġ= Ġget Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ text _ level _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TEXT _ LEVEL _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Title Color Ġ= Ġget Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ text _ title _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TEXT _ TITLE _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Color Ġ= Ġget Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ background _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TEXT _ TITLE _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun progress Color Ġ= Ġget Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ un progress _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ UN PROGRESS _ COLOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġget Integer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Speed ProgressBar _ spb _ stroke _ with , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ ST RO KE _ Wi D TH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( R . style able . Speed ProgressBar _ spb _ src )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġ( it Ġas ĠBitmap Drawable ). bitmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Color Ġ= Ġbitmap . getColor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Ready Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Setup Pending ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Setup Pending Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! m Ready ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Setup Pending Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ== Ġ 0 Ġ&& Ġheight Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġborder Rect . set ( get Bound Rect F ( stroke Width )) ĊĊĠĠĠĠĠĠĠ Ġtext Level Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġradius . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġtext Level Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Title Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġradius . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġtext Title Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor Utils . blend ARGB ( progress Color , ĠColor . BLACK , Ġ 0 . 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġthis @ Level ProgressBar . stroke Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= Ġif Ġ( is Step Progress ) ĠPaint . Cap . ROUND Ġelse ĠPaint . Cap . B UT T ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġun Progress Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġun progress Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġthis @ Level ProgressBar . stroke Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= Ġif Ġ( is Step Progress ) ĠPaint . Cap . ROUND Ġelse ĠPaint . Cap . B UT T ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbackground Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġprogress Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Level Paint . alpha Ġ= ĠOP ACITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Title Paint . alpha Ġ= ĠOP ACITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Paint . alpha Ġ= ĠOP ACITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Paint . alpha Ġ= ĠOP ACITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun Progress Paint . alpha Ġ= ĠOP ACITY ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ( speed Ġ* Ġ 1 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġangle Ġ= Ġ( DEFAULT _ TOTAL _ ANGLE Ġ* Ġprogress Ġ/ ĠDEFAULT _ MAX _ PROGRESS ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Height Ġ= Ġtext Level Paint . desc ent () Ġ- Ġtext Level Paint . as cent () ĊĠĠĠĠĠĠĠ Ġtext Offset Ġ= Ġtext Height Ġ/ Ġ 2 Ġ- Ġtext Level Paint . desc ent () ĊĠĠĠĠĠĠĠ Ġcontinuous Swipe Angle Ġ= ĠDEFAULT _ START _ ANGLE Ġ+ Ġangle ĊĠĠĠĠĠĠĠ Ġcontinuous Start Angle Ġ= ĠDEFAULT _ TOTAL _ ANGLE Ġ- Ġangle ĊĊĠĠĠĠĠĠĠ Ġbitmap ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Height Ġ= Ġit . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Width Ġ= Ġit . width ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Shader Ġ= ĠBitmap Shader ( it , ĠShader . Tile Mode . CLAMP , ĠShader . Tile Mode . CLAMP ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Paint . shader Ġ= Ġbitmap Shader ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Rect . set ( border Rect ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Shader Matrix () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborder Rect . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborder Rect . center Y (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius Ġ- ĠstrokeWidth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Paint ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġstep Ġprogress ĊĠĠĠĠĠĠĠ Ġif Ġ( is Step Progress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstep Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( step Ġ<= ĠDEFAULT _ TOTAL _ ANGLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step Ġ<= Ġangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder Rect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( DEFAULT _ START _ ANGLE Ġ+ Ġstep ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder Rect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( DEFAULT _ START _ ANGLE Ġ+ Ġstep ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Progress Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Ġ+= Ġ 3 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( border Rect , ĠDEFAULT _ START _ ANGLE . toFloat (), Ġangle , Ġfalse , Ġprogress Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( angle Ġ< ĠDEFAULT _ TOTAL _ ANGLE ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder Rect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuous Swipe Angle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuous Start Angle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Progress Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// level Title ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed . toInt (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder Rect . center X (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder Rect . center Y () Ġ+ Ġtext Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Level Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* Don 't Ġset Ġbackground */ ĊĠĠĠ Ġoverride Ġfun Ġset Background ( background : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġsuper . setBackground ( background ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset BackgroundColor ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġsuper . set BackgroundColor ( color ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset OnClickListener ( l : ĠOn ClickListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . setOnClickListener ( l ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset On Touch Listener ( l : ĠOn Touch Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . setOn Touch Listener ( l ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Mode Ġ= ĠMeasure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Size Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Mode Ġ= ĠMeasure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Size Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdesired Width Ġ= Ġ( width Ġ+ ĠstrokeWidth Ġ+ Ġpadding Right Ġ+ Ġpadding Left ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġdesired Height Ġ= Ġ( height Ġ+ ĠstrokeWidth Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ// Measure ĠWidth ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwhen Ġ( width Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . EX ACT LY Ġ-> Ġ// Must Ġbe Ġthis Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . AT _ MO ST Ġ-> Ġ// Can 't Ġbe Ġbigger Ġthan ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ( desired Width , Ġwidth Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ// Be Ġwhatever Ġyou Ġwant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Width ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Measure ĠHeight ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġwhen Ġ( height Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . EX ACT LY Ġ-> Ġ// Must Ġbe Ġthis Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . AT _ MO ST Ġ-> Ġ// Can 't Ġbe Ġbigger Ġthan ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ( desired Height , Ġheight Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ// Be Ġwhatever Ġyou Ġwant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdesired Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġmin ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ( min Ġ/ Ġ 2 . 5 ). toInt () ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġheight ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Padding ( left : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Padding ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Padding Relative ( start : ĠInt , Ġtop : ĠInt , Ġend : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Padding Relative ( start , Ġtop , Ġend , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġupdate Shader Matrix () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġdx Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġdy Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġm Shader Matrix . set ( null ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Width Ġ* Ġdrawable Rect . height () Ġ> Ġdrawable Rect . width () Ġ* Ġbitmap Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġdrawable Rect . height () Ġ/ Ġbitmap Height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Ġ= Ġ( drawable Rect . width () Ġ- Ġbitmap Width Ġ* Ġscale ) Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġdrawable Rect . width () Ġ/ Ġbitmap Width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Ġ= Ġ( drawable Rect . height () Ġ- Ġbitmap Height Ġ* Ġscale ) Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Shader Matrix . set Scale ( scale , Ġscale ) ĊĠĠĠĠĠĠĠ Ġm Shader Matrix . post Translate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( dx Ġ+ Ġ 0 . 5 f ). toInt () Ġ+ Ġdrawable Rect . left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( dy Ġ+ Ġ 0 . 5 f ). toInt () Ġ+ Ġdrawable Rect . top ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbitmap Shader . set Local Matrix ( m Shader Matrix ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Progress With Animation ( progress : ĠFloat ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġobject Animator Ġ= ĠObject Animator . of Float ( this , Ġ" speed ", Ġprogress ) ĊĠĠĠĠĠĠĠ Ġobject Animator . duration Ġ= Ġ 1 5 0 0 ĊĠĠĠĠĠĠĠ Ġobject Animator . interpol ator Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠ Ġobject Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" Setter / Getter "> ĊĊĠĠĠ Ġfun Ġset Type face ( type face : ĠType face ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Title Paint . type face Ġ= Ġtype face ĊĠĠĠĠĠĠĠ Ġtext Level Paint . type face Ġ= Ġtype face ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Speed (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġspeed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Speed ( speed : ĠFloat ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . speed Ġ== Ġspeed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . speed Ġ= Ġspeed ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠgetText Title (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Title ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text Title ( text Title : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . text Title Ġ== Ġtext Title ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . text Title Ġ= Ġtext Title ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetText Level Color (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Level Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text Level Color ( text Level Color : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . text Level Color Ġ== Ġtext Level Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . text Level Color Ġ= Ġtext Level Color ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetText Title Color (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Title Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text Title Color ( text Title Color : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . text Title Color Ġ== Ġtext Title Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . text Title Color Ġ= Ġtext Title Color ĊĠĠĠĠĠĠĠ Ġsetup () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Background Progress Color (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprogress Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Background Progress Color ( background Progress Color : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . bitmap Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġthis . progress Color Ġ= Ġbackground Progress Color ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Un progress Color (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġun progress Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Un progress Color ( un progress Color : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . un progress Color Ġ== Ġun progress Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . un progress Color Ġ= Ġun progress Color ĊĠĠĠĠĠĠĠ Ġsetup () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Enable (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Enable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Enable ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Enable Ġ== Ġenable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . is Enable Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠsetIs Step ( is Step Progress : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Step Progress Ġ== Ġis Step Progress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . is Step Progress Ġ= Ġis Step Progress ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Image ( drawable : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bitmap Ġ= Ġ( Context Compat . get Drawable ( context !! , Ġdrawable ) Ġas ĠBitmap Drawable ). bitmap ĊĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// </ editor - fold > Ċ Ċ }