package Ġcom . github . dy v oker . th rob ber Ċ Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroidx . annotation . Color Int Ċ import Ġcom . github . dy v oker . th rob ber . shadow . Canvas With Shadow Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠDraw Ġcircle Ġwith Ġshadow Ġ( optional ). Ċ Ġ* Ċ Ġ* Ġ@ param Ġcolor ĠColor Ġof Ġcircular Ġbackground . Ċ Ġ* Ġ@ param Ġdensity Converter ĠConverter Ġof ĠD ensity ĠIn depend ence ĠPixel s . Ċ Ġ* Ġ@ param Ġshadow Color ĠColor Ġof Ġa Ġshadow . Ċ Ġ* Ġ@ param Ġshadow Radius Dp ĠBl ur - radius Ġof Ġa Ġshadow Ġcorner Ġ( dp ). Ċ Ġ* Ġ@ param Ġoffset X Dp ĠShadow Ġtranslation Ġby ĠX - axis Ġ( dp ). Ċ Ġ* Ġ@ param Ġoffset Y Dp ĠShadow Ġtranslation Ġby ĠY - axis Ġ( dp ). Ċ Ġ*/ Ċ class ĠCircle Drawable Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġcolor : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdensity Converter : ĠD ensity Converter , ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġprivate Ġval Ġshadow Color : ĠInt Ġ= Ġ- 0 x 8 0 0 0 0 0 0 0 , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshadow Radius Dp : ĠFloat Ġ= Ġ 2 f , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoffset X Dp : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoffset Y Dp : ĠFloat Ġ= Ġ 2 f Ċ ) Ġ: ĠDrawable () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply { ĊĠĠĠĠĠĠĠ Ġthis . color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġshadow : ĠCanvas With Shadow ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefault Ġconstructor . ĊĠĠĠĠ Ġ* Ġ@ param Ġdensity Converter ĠConverter Ġof ĠD ensity ĠIn depend ence ĠPixel s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( density Converter : ĠD ensity Converter ) Ġ: Ġthis ( Color . WHITE , Ġdensity Converter ) ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( shadow Ġ!= Ġnull ) Ġ{ Ġ// ĠDraw Ġcached Ġimage . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow !!. draw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas , Ġshadow Color , Ġshadow Radius Dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset X Dp , Ġoffset Y Dp , Ġ! shadow !!. is Same Size ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshadow Ġ= ĠCanvas With Shadow ( canvas , Ġdensity Converter ) ĊĠĠĠĠĠĠĠ Ġval Ġtemp Canvas Ġ= Ġshadow !!. canvas ĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġprimitives . ĊĠĠĠĠĠĠĠ Ġval Ġshadow Padding Ġ= Ġdensity Converter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. dp To Px ( shadow Radius Dp Ġ+ Ġmax ( offset X Dp , Ġoffset Y Dp )) Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġmin ( bounds . width () Ġ/ Ġ 2 , Ġbounds . height () Ġ/ Ġ 2 ) Ġ- Ġshadow Padding ĊĠĠĠĠĠĠĠ Ġtemp Canvas . draw Circle ( radius Ġ+ Ġshadow Padding , Ġradius Ġ+ Ġshadow Padding , Ġradius , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġshadow . ĊĠĠĠĠĠĠĠ Ġshadow !!. draw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas , Ġshadow Color , Ġshadow Radius Dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset X Dp , Ġoffset Y Dp , Ġ! shadow !!. is Same Size ( canvas ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Alpha ( alpha : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Color Filter ( color Filter : ĠColor Filter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġcolor Filter ĊĠĠĠĠĠĠĠ Ġinvalidate Self () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Opacity (): ĠInt Ġ= ĠPixel Format . OP A QUE Ċ }