package Ġcom . example . kotlin custom view sample . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġcom . example . kotlin custom view sample . R Ċ Ċ /** Ċ Ġ* ĠCustom ĠE mo View Ġclass Ċ Ġ*/ Ċ class ĠE mo View ( ĊĠ Ġcontext : ĠContext , ĊĠ Ġattrs : ĠAttributeSet Ċ ) Ġ: ĠView ( context , Ġattrs ) Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ FACE _ COLOR Ġ= ĠColor . YELLOW ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ EY ES _ COLOR Ġ= ĠColor . BLACK ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ MO UTH _ COLOR Ġ= ĠColor . BLACK ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ BORDER _ COLOR Ġ= ĠColor . BLACK ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ BORDER _ WIDTH Ġ= Ġ 4 . 0 f ĊĠĠĠ Ġconst Ġval ĠH AP PY Ġ= Ġ 0 L ĊĠĠĠ Ġconst Ġval ĠS AD Ġ= Ġ 1 L ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġpaint : ĠPaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠ Ġprivate Ġvar Ġface Toggle Color Ġ= ĠColor . YELLOW ĊĠ Ġprivate Ġvar Ġm outh Toggle Color Ġ= ĠColor . YELLOW ĊĠ Ġprivate Ġvar Ġeyes Toggle Color Ġ= ĠColor . YELLOW ĊĠ Ġprivate Ġvar Ġborder Toggle Color Ġ= ĠColor . YELLOW ĊĊĠ Ġprivate Ġvar Ġface Color Ġ= ĠColor . YELLOW ĊĠ Ġprivate Ġvar Ġeyes Color Ġ= ĠColor . BLACK ĊĠ Ġprivate Ġvar Ġm outh Color Ġ= ĠColor . BLACK ĊĠ Ġprivate Ġvar ĠborderColor Ġ= ĠColor . BLACK ĊĊĠ Ġprivate Ġvar Ġface Paint Color Ġ= ĠDEFAULT _ FACE _ COLOR ĊĠ Ġprivate Ġvar Ġm outh Paint Color Ġ= ĠDEFAULT _ MO UTH _ COLOR ĊĠ Ġprivate Ġvar Ġborder Paint Color Ġ= ĠDEFAULT _ BORDER _ COLOR ĊĠ Ġprivate Ġvar Ġeyes Paint Color Ġ= ĠDEFAULT _ EY ES _ COLOR ĊĊĠ Ġprivate Ġvar Ġis Toggle d Ġ= Ġtrue ĊĊĠ Ġprivate Ġvar ĠborderWidth Ġ= Ġ 4 . 0 f ĊĠ Ġprivate Ġvar Ġsize Ġ= Ġ 3 2 0 ĊĊĠ Ġprivate Ġval Ġm outh Path : ĠPath Ġ= ĠPath () ĊĊĠ Ġvar Ġm ood Ġ= ĠH AP PY ĊĠĠĠ Ġset ( state ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġstate ĊĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . Em otion al Face View , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġm ood Ġ= Ġget Int ( R . style able . Em otion al Face View _ mood , ĠH AP PY . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Long () ĊĠĠĠĠĠĠĠĠĠ Ġface Color Ġ= Ġget Color ( R . style able . Em otion al Face View _ face Color , ĠDEFAULT _ FACE _ COLOR ) ĊĠĠĠĠĠĠĠĠĠ Ġeyes Color Ġ= Ġget Color ( R . style able . Em otion al Face View _ ey es Color , ĠDEFAULT _ EY ES _ COLOR ) ĊĠĠĠĠĠĠĠĠĠ Ġm outh Color Ġ= Ġget Color ( R . style able . Em otion al Face View _ m outh Color , ĠDEFAULT _ MO UTH _ COLOR ) ĊĠĠĠĠĠĠĠĠĠ ĠborderColor Ġ= Ġget Color ( R . style able . Em otion al Face View _ border Color , ĠDEFAULT _ BORDER _ COLOR ) ĊĊĠĠĠĠĠĠĠĠĠ Ġm outh Toggle Color Ġ= Ġget Color ( R . style able . Em otion al Face View _ m outh Toggle Color , Ġm outh Color ) ĊĠĠĠĠĠĠĠĠĠ Ġeyes Toggle Color Ġ= Ġget Color ( R . style able . Em otion al Face View _ ey es Toggle Color , Ġeyes Color ) ĊĠĠĠĠĠĠĠĠĠ Ġborder Toggle Color Ġ= Ġget Color ( R . style able . Em otion al Face View _ border Toggle Color , ĠborderColor ) ĊĠĠĠĠĠĠĠĠĠ Ġface Toggle Color Ġ= Ġget Color ( R . style able . Em otion al Face View _ face Toggle Color , Ġface Color ) ĊĊĠĠĠĠĠĠĠĠĠ ĠborderWidth Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Dimension ( R . style able . Em otion al Face View _ border Width , ĠDEFAULT _ BORDER _ WIDTH ) ĊĠĠĠĠĠĠĠĠĠ Ġassign View Paint Colors () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. recycle () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġassign View Paint Colors () Ġ{ ĊĠĠĠ Ġface Paint Color Ġ= Ġface Color ĊĠĠĠ Ġm outh Paint Color Ġ= Ġm outh Color ĊĠĠĠ Ġborder Paint Color Ġ= ĠborderColor ĊĠĠĠ Ġeyes Paint Color Ġ= Ġeyes Color ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdispatch Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" touch ", Ġ"$ event ") ĊĠĠĠĠĠĠĠ Ġtoggle All Colors () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( event ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtoggle All Colors () Ġ{ ĊĠĠĠ Ġface Paint Color Ġ= Ġif Ġ( is Toggle d ) Ġface Toggle Color Ġelse Ġface Color ĊĠĠĠ Ġborder Paint Color Ġ= Ġif Ġ( is Toggle d ) Ġborder Toggle Color Ġelse ĠborderColor ĊĠĠĠ Ġm outh Paint Color Ġ= Ġif Ġ( is Toggle d ) Ġm outh Toggle Color Ġelse Ġm outh Color ĊĠĠĠ Ġeyes Paint Color Ġ= Ġif Ġ( is Toggle d ) Ġeyes Toggle Color Ġelse Ġeyes Color ĊĠĠĠ Ġis Toggle d Ġ= Ġ! is Toggle d ĊĠĠĠ Ġinvalidate () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠ ĠLog . d (" Em otion al FV ", Ġ" On Draw () ") ĊĠĠĠ Ġdraw Sm iley ( 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 ) ĊĠĠĠ ĠLog . d (" Em otion al FV ", Ġ" Measured Ġmin Ġwidth | height Ġ[ square ]-> Ġ$ size ") ĊĠĠĠ Ġset Measured Dimension ( size , Ġsize ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠ Ġreturn ĠBundle (). apply Ġ{ ĊĠĠĠĠĠ Ġput Long (" mood ", Ġm ood ) ĊĠĠĠĠĠ Ġput Parcelable (" super ", Ġsuper . on Save InstanceState ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ) Ġ{ ĊĠĠĠ Ġ( state Ġas ĠBundle ). apply Ġ{ ĊĠĠĠĠĠ Ġm ood Ġ= Ġget Long (" mood ") ĊĠĠĠĠĠ Ġsuper . on Restore InstanceState ( get Parcelable (" super ")) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdraw Sm iley ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠ Ġval Ġ( cx , Ġcy , Ġradius ) Ġ= ĠTrip le ( size Ġ/ Ġ 2 f , Ġsize Ġ/ Ġ 2 f , Ġsize Ġ/ Ġ 2 f ) ĊĠĠĠ Ġdraw Face ( canvas , Ġcx , Ġcy , Ġradius , Ġface Paint Color ) ĊĠĠĠ Ġdraw Border ( canvas , Ġcx , Ġcy , Ġradius , Ġborder Paint Color ) ĊĠĠĠ Ġdraw E yes ( canvas , Ġeyes Paint Color ) ĊĠĠĠ Ġdraw M outh ( canvas , Ġm outh Paint Color ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdraw Face ( ĊĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠ Ġcx : ĠFloat , ĊĠĠĠ Ġcy : ĠFloat , ĊĠĠĠ Ġradius : ĠFloat , ĊĠĠĠ Ġitem Color : ĠInt ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġpaint . apply Ġ{ ĊĠĠĠĠĠ Ġcolor Ġ= Ġitem Color ĊĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠ Ġcanvas . draw Circle ( cx , Ġcy , Ġradius , Ġthis ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdraw Border ( ĊĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠ Ġcx : ĠFloat , ĊĠĠĠ Ġcy : ĠFloat , ĊĠĠĠ Ġradius : ĠFloat , ĊĠĠĠ Ġitem Color : ĠInt ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġpaint . apply Ġ{ ĊĠĠĠĠĠ Ġcolor Ġ= Ġitem Color ĊĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠ ĠstrokeWidth Ġ= ĠborderWidth ĊĠĠĠĠĠ Ġcanvas . draw Circle ( cx , Ġcy , Ġradius Ġ- ĠborderWidth , Ġthis ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdraw E yes ( ĊĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠ Ġitem Color : ĠInt ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġpaint . apply Ġ{ ĊĠĠĠĠĠ Ġcolor Ġ= Ġitem Color ĊĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠ ĠRect F ( size Ġ* Ġ 0 . 3 2 f , Ġsize Ġ* Ġ 0 . 3 3 f , Ġsize Ġ* Ġ 0 . 4 3 f , Ġsize Ġ* Ġ 0 . 5 0 f ). let Ġ{ Ġl Rect Ġ-> ĊĠĠĠĠĠĠĠ Ġcanvas . draw O val ( l Rect , Ġthis ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠRect F ( size Ġ* Ġ 0 . 5 7 f , Ġsize Ġ* Ġ 0 . 3 3 f , Ġsize Ġ* Ġ 0 . 6 8 f , Ġsize Ġ* Ġ 0 . 5 0 f ). let Ġ{ Ġr Rect Ġ-> ĊĠĠĠĠĠĠĠ Ġcanvas . draw O val ( r Rect , Ġthis ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdraw M outh ( ĊĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠ Ġitem Color : ĠInt ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġpaint . apply Ġ{ ĊĠĠĠĠĠ Ġcolor Ġ= Ġitem Color ĊĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠ Ġm outh Path . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mood ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠH AP PY Ġ-> Ġdraw Happy Path () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdraw S ad Path () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcanvas . draw Path ( m outh Path , Ġthis ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠPath . draw S ad Path () Ġ{ ĊĠĠĠ Ġmove To ( size Ġ* Ġ 0 . 2 2 f , Ġsize Ġ* Ġ 0 . 7 f ) ĊĠĠĠ Ġquad To ( size Ġ* Ġ 0 . 5 0 f , Ġsize Ġ* Ġ 0 . 5 0 f , Ġsize Ġ* Ġ 0 . 7 8 f , Ġsize Ġ* Ġ 0 . 7 0 f ) ĊĠĠĠ Ġquad To ( size Ġ* Ġ 0 . 5 0 f , Ġsize Ġ* Ġ 0 . 6 0 f , Ġsize Ġ* Ġ 0 . 2 2 f , Ġsize Ġ* Ġ 0 . 7 f ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠPath . draw Happy Path () Ġ{ ĊĠĠĠ Ġmove To ( size Ġ* Ġ 0 . 2 2 f , Ġsize Ġ* Ġ 0 . 6 f ) ĊĠĠĠ Ġquad To ( size Ġ* Ġ 0 . 5 0 f , Ġsize Ġ* Ġ 0 . 8 0 f , Ġsize Ġ* Ġ 0 . 7 8 f , Ġsize Ġ* Ġ 0 . 6 0 f ) ĊĠĠĠ Ġquad To ( size Ġ* Ġ 0 . 5 0 f , Ġsize Ġ* Ġ 0 . 9 0 f , Ġsize Ġ* Ġ 0 . 2 2 f , Ġsize Ġ* Ġ 0 . 6 0 f ) ĊĠ Ġ} Ċ }