package Ġcom . ang cy o . drawable . loading Ċ Ċ import Ġandroid . graphics .* Ċ import Ġandroidx . core . graphics . to Rect F Ċ import Ġcom . ang cy o . drawable . base . Base Section Drawable Ċ import Ġcom . ang cy o . library . ex . dp Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠEmail : ang cy o @ 1 2 6 . com Ċ Ġ* Ġ@ author Ġang cy o Ċ Ġ* Ġ@ date Ġ 2 0 2 1 / 0 5 / 0 8 Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠSh en Z hen ĠWay to ĠLtd . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ class ĠPath Loading Drawable Ġ: ĠBase Section Drawable () Ġ{ ĊĊĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠ Ġval Ġpath Measure Ġ= ĠPath Measure () ĊĠĠĠ Ġval Ġ_ draw Path Ġ= ĠPath () ĊĊĠĠĠ Ġvar Ġradius : ĠFloat Ġ= Ġ 4 0 f ĊĊĠĠĠ Ġvar ĠstrokeWidth Ġ= Ġ 3 Ġ* Ġdp ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsections Ġ= Ġfloat ArrayOf ( 0 . 5 f , Ġ 0 . 5 f ) ĊĊĠĠĠĠĠĠĠ Ġtext Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġtext Paint . stroke Width Ġ= ĠstrokeWidth ĊĠĠĠĠĠĠĠ Ġtext Paint . color Ġ= ĠColor . RED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bounds Change ( bounds : ĠRect ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Bounds Change ( bounds ) ĊĊĠĠĠĠĠĠĠ Ġbounds ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect F Ġ= Ġit . to Rect F (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinset ( stroke Width Ġ/ Ġ 2 , ĠstrokeWidth Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// path . add Round Rect ( rect F , Ġradius , Ġradius , ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// path . add Round Rect ( rect F , Ġradius , Ġradius , ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// path . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( rect F . left , Ġrect F . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . left , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . top , Ġrect F . right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . right , Ġrect F . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . bottom , Ġrect F . left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . left , Ġrect F . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . top , Ġrect F . right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . right , Ġrect F . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( rect F . bottom , Ġrect F . left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Measure . set Path ( path , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Progress Section ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠ Ġstart Progress : ĠFloat , ĊĠĠĠĠĠĠĠ Ġend Progress : ĠFloat , ĊĠĠĠĠĠĠĠ Ġtotal Progress : ĠFloat , ĊĠĠĠĠĠĠĠ Ġsection Progress : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw Progress Section ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Progress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Progress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Progress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsection Progress ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* path Measure . get Segment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Progress Ġ* Ġpath Measure . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( section Progress Ġ+ Ġsection Progress Ġ* Ġ 2 ) Ġ* Ġpath Measure . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ draw Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Measure . get Segment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 2 f Ġ* Ġpath Measure . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 7 f Ġ* Ġpath Measure . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ draw Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path (_ draw Path , Ġtext Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Section ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġmax Section : ĠInt , ĊĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠ Ġtotal Progress : ĠFloat , ĊĠĠĠĠĠĠĠ Ġprogress : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw Section ( canvas , Ġmax Section , Ġindex , Ġtotal Progress , Ġprogress ) Ċ // ĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġtext Paint ) ĊĠĠĠ Ġ} Ċ }