package Ġcom . ast . dev . library Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ Ċ /** Ċ Ġ* ĠCustom Ġcircular Ġview Ġwith Ġcustom izable Ġproperties Ċ Ġ* ĠCreated Ġby ĠAx el ĠTr aj ano Ġon Ġ 2 3 / 1 0 / 2 0 1 8 . Ċ Ġ*/ Ċ class ĠCircle Icon View ( context : ĠContext ?, Ġattrs : ĠAttributeSet ? Ġ= Ġnull ) Ġ: ĠView ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ BACKGROUND _ COLOR Ġ= ĠColor . TRANSP ARENT ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ BORDER _ COLOR Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ BORDER _ RATIO Ġ= Ġ 0 . 0 5 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ ICON _ COLOR Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CLIP PING Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ ICON _ RATIO Ġ= Ġ 0 . 5 3 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ ICON _ OFFSET Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġbackground Fill Color Ġ= ĠDEFAULT _ BACKGROUND _ COLOR ĊĠĠĠ Ġvar ĠborderColor Ġ= ĠDEFAULT _ BORDER _ COLOR ĊĠĠĠ Ġvar Ġborder Ratio Ġ= ĠDEFAULT _ BORDER _ RATIO ĊĠĠĠ Ġvar Ġbitmap Ġ: ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġicon Ratio Ġ= ĠDEFAULT _ ICON _ RATIO ĊĠĠĠ Ġvar Ġicon Offset V Ġ= ĠDEFAULT _ ICON _ OFFSET ĊĠĠĠ Ġvar Ġicon Offset H Ġ= ĠDEFAULT _ ICON _ OFFSET ĊĠĠĠ Ġvar Ġicon Color Ġ= ĠDEFAULT _ ICON _ COLOR ĊĠĠĠ Ġvar Ġclip To Border Ġ= ĠDEFAULT _ CLIP PING ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġicon Filter Ġ: ĠPort er D uff Color Filter ĊĠĠĠ Ġprivate Ġvar Ġdrawable Id Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġsize Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġbackground Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġpath Ġ= ĠPath () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsetup Attributes ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Attributes ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠObtain Ġa Ġtyped Ġarray Ġof Ġattributes ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Circle Icon View , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExtract Ġcustom Ġattributes Ġinto Ġmember Ġvariables ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Fill Color Ġ= Ġtyped Array . getColor ( R . style able . Circle Icon View _ background Fill Color , ĠDEFAULT _ BACKGROUND _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborder Ratio Ġ= Ġtyped Array . get Float ( R . style able . Circle Icon View _ border Ratio , ĠDEFAULT _ BORDER _ RATIO ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠborderColor Ġ= Ġtyped Array . getColor ( R . style able . Circle Icon View _ border Color , ĠDEFAULT _ BORDER _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Border Ġ= Ġtyped Array . getBoolean ( R . style able . Circle Icon View _ clip To Border , ĠDEFAULT _ CLIP PING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Id Ġ= Ġtyped Array . getResource Id ( R . style able . Circle Icon View _ icon Drawable , Ġdrawable Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Color Ġ= Ġtyped Array . getColor ( R . style able . Circle Icon View _ icon Color , ĠDEFAULT _ ICON _ COLOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Factory . decode Resource ( resources , Ġdrawable Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ratio Ġ= Ġtyped Array . get Float ( R . style able . Circle Icon View _ icon Ratio , ĠDEFAULT _ ICON _ RATIO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Offset H Ġ= Ġtyped Array . get Float ( R . style able . Circle Icon View _ icon Offset H , ĠDEFAULT _ ICON _ OFFSET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Offset V Ġ= Ġtyped Array . get Float ( R . style able . Circle Icon View _ icon Offset V , ĠDEFAULT _ ICON _ OFFSET ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTyped Array Ġobjects Ġare Ġshared Ġand Ġmust Ġbe Ġre cyc led . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġdraw Bounds ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Icon ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Border ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġsize Ġ= ĠMath . min ( meas ured Width , Ġmeasured Height ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( size , Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Bounds ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! clip To Border ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Color ( background Fill Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġsize Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġbackground Paint . color Ġ= Ġbackground Fill Color ĊĠĠĠĠĠĠĠ Ġpath . add Circle ( radius , Ġradius , Ġradius , ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Path ( path , Ġbackground Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas ?. clip Path ( path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Border ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠborderWidth Ġ= Ġsize Ġ* Ġborder Ratio ĊĠĠĠĠĠĠĠ Ġif Ġ( border Width Ġ<= Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġsize Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠborderColor ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= ĠborderWidth ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( radius , Ġradius , Ġradius Ġ- ĠborderWidth Ġ/ Ġ 2 f , Ġpaint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Icon ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġsize Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġicon Size Ġ: ĠInt Ġ= Ġ( size Ġ* Ġicon Ratio ). toInt () ĊĊĠĠĠĠĠĠĠ Ġbitmap ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Scaled Bitmap ( it , Ġicon Size , Ġicon Size , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġicon Filter Ġ= ĠPort er D uff Color Filter ( icon Color , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġicon Filter ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġbitmap ?. width ?. div ( 2 . 0 f ) ĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset H Ġ= Ġ( radius Ġ- Ġoffset ) Ġ+ Ġ( offset Ġ* Ġicon Offset H ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset V Ġ= Ġ( radius Ġ- Ġoffset ) Ġ+ Ġ( offset Ġ* Ġicon Offset V ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Bitmap ( bitmap !! , Ġoffset H , Ġoffset V , Ġif Ġ( icon Color Ġ== Ġ- 1 ) Ġnull Ġelse Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint . color Filter Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }