package Ġcom . h jq . widget . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics .* Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . String Res Ċ import Ġcom . h jq . widget . R Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* ĠĠĠ Ġauthor Ġ: ĠH ao Z hang Ġ& ĠAndroid Ġ è½® åŃĲ åĵ ¥ Ċ Ġ* ĠĠĠ Ġgithub Ġ: Ġhttps :// github . com / He Z ai J in / Sl anted TextView Ċ Ġ* ĠĠĠ Ġtime ĠĠ Ġ: Ġ 2 0 1 6 / 0 6 / 3 0 Ċ Ġ* ĠĠĠ Ġdesc ĠĠ Ġ: Ġ ä¸Ģä¸ª åĢ ¾ æĸ ľ çļĦ ĠTextView ï¼Į éĢĤ çĶ¨äºİ æłĩçŃ¾ æķĪæŀľ Ċ Ġ*/ Ċ @ Suppress (" R tl Hard coded ") Ċ class ĠSl anted TextView Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: ĊĠĠĠ ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ æĹ ĭ è½¬ è§Ĵ åº¦ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠROT ATE _ ANGLE : ĠInt Ġ= Ġ 4 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ èĥĮæĻ¯ çĶ» ç¬Ķ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġbackground Paint : ĠPaint Ġ= ĠPaint () ĊĊĠĠĠ Ġ/** Ġ æĸĩåŃĹ çĶ» ç¬Ķ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġtext Paint : ĠText Paint ĊĊĠĠĠ Ġ/** Ġ æĺ¾ç¤º çļĦ æĸĩæľ¬ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtext : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ/** Ġ åĢ ¾ æĸ ľ éĩį å¿ĥ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġgravity : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** Ġæĺ¯åĲ¦ ç»ĺ åĪ¶ æĪĲ ä¸ī è§Ĵ å½¢ çļĦ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtriangle : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** Ġ èĥĮæĻ¯ é¢ľèī² Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġcolor Background : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** Ġ æĸĩåŃĹ æµĭ éĩı èĮĥåĽ´ è£ħ è½½ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġtext Bounds : ĠRect Ġ= ĠRect () ĊĊĠĠĠ Ġ/** Ġæµ ĭ éĩı åĩº æĿ¥çļĦ æĸĩæľ¬ é«ĺåº¦ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtext Height : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġbackground Paint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ OVER ) ĊĠĠĠĠĠĠĠ Ġbackground Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtext Paint Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠĠĠĠĠ Ġtext Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġarray : ĠTyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Sl anted TextView ) ĊĠĠĠĠĠĠĠ Ġset Text ( array . getString ( R . style able . Sl anted TextView _ android _ text )) ĊĠĠĠĠĠĠĠ Ġset Text Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġarray . get Dimension Pixel Size ( R . style able . Sl anted TextView _ android _ text Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Dimension ( R . dim en . sp _ 1 2 ). toInt ()). toFloat ()) ĊĠĠĠĠĠĠĠ Ġset TextColor ( array . getColor ( R . style able . Sl anted TextView _ android _ textColor , ĠColor . WHITE )) ĊĠĠĠĠĠĠĠ Ġset TextStyle ( Type face . default From Style ( array . getInt ( R . style able . Sl anted TextView _ android _ text Style , ĠType face . NORMAL ))) ĊĠĠĠĠĠĠĠ Ġset Gravity ( array . getInt ( R . style able . Sl anted TextView _ android _ gravity , ĠGr avity . END )) ĊĠĠĠĠĠĠĠ Ġset Color Background ( array . getColor ( R . style able . Sl anted TextView _ android _ color Background , Ġget Accent Color ())) ĊĠĠĠĠĠĠĠ Ġset Triangle ( array . getBoolean ( R . style able . Sl anted TextView _ triangle , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġarray . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Paint . getText Bounds ( text , Ġ 0 , Ġtext . length , Ġtext Bounds ) ĊĠĠĠĠĠĠĠ Ġtext Height Ġ= Ġtext Bounds . height () Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhen Ġ( Measure Spec . get Mode ( width Measure Spec )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . EX ACT LY Ġ-> Ġwidth Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . AT _ MO ST , ĠMeasure Spec . UNSPECIFIED Ġ-> Ġwidth Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Bounds . width () Ġ+ Ġpadding Left Ġ+ Ġpadding Right ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhen Ġ( Measure Spec . get Mode ( height Measure Spec )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . EX ACT LY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . AT _ MO ST , ĠMeasure Spec . UNSPECIFIED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġtext Bounds . height () Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( max ( width , Ġheight ), Ġmax ( width , Ġheight )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdraw Background ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Text ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ èĥĮæĻ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Background ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġcanvas . width ĊĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġcanvas . height ĊĠĠĠĠĠĠĠ Ġwhen Ġ( gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . LEFT , ĠGr avity . LEFT Ġor ĠGr avity . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( triangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( 0 f , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( width . toFloat (), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( 0 f , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( 0 f , Ġ( height Ġ- Ġtext Height ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo (( width Ġ- Ġtext Height ). toFloat (), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . NO _ GR AV ITY , ĠGr avity . RIGHT , ĠGr avity . RIGHT Ġor ĠGr avity . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( triangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġ( height Ġ- Ġtext Height ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( text Height Ġ* Ġ 1 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM , ĠGr avity . LEFT Ġor ĠGr avity . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( triangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( 0 f , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo (( width Ġ- Ġtext Height ). toFloat (), Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( 0 f , Ġtext Height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . RIGHT Ġor ĠGr avity . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( triangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( 0 f , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( 0 f , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( text Height Ġ* Ġ 1 f , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġtext Height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( width . toFloat (), Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" are Ġyou Ġok ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpath . close () ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġbackground Paint ) ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ æĸĩæľ¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Text ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġcanvas . width Ġ- Ġtext Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġcanvas . height Ġ- Ġtext Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġrect : ĠRect ? ĊĠĠĠĠĠĠĠ Ġval Ġrect F : ĠRect F ? ĊĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt Ġ= Ġtext Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġto X : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġto Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġcenter X : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġcenter Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġangle : ĠFloat ĊĠĠĠĠĠĠĠ Ġwhen Ġ( gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . LEFT , ĠGr avity . LEFT Ġor ĠGr avity . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect Ġ= ĠRect ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F Ġ= ĠRect F ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ= Ġtext Paint . measure Text ( text , Ġ 0 , Ġtext . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ= Ġtext Paint . desc ent () Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left Ġ+= Ġ( rect . width () Ġ- Ġrect F . right ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ+= Ġ( rect . height () Ġ- Ġrect F . bottom ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto X Ġ= Ġrect F . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Y Ġ= Ġrect F . top Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter X Ġ= Ġwidth Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y Ġ= Ġheight Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ= Ġ- ROT ATE _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . NO _ GR AV ITY , ĠGr avity . RIGHT , ĠGr avity . RIGHT Ġor ĠGr avity . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect Ġ= ĠRect ( offset , Ġ 0 , Ġwidth Ġ+ Ġoffset , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F Ġ= ĠRect F ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ= Ġtext Paint . measure Text ( text , Ġ 0 , Ġtext . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ= Ġtext Paint . desc ent () Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left Ġ+= Ġ( rect . width () Ġ- Ġrect F . right ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ+= Ġ( rect . height () Ġ- Ġrect F . bottom ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto X Ġ= Ġrect F . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Y Ġ= Ġrect F . top Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter X Ġ= Ġwidth Ġ/ Ġ 2 f Ġ+ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y Ġ= Ġheight Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ= ĠROT ATE _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM , ĠGr avity . LEFT Ġor ĠGr avity . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect Ġ= ĠRect ( 0 , Ġoffset , Ġwidth , Ġheight Ġ+ Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F Ġ= ĠRect F ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ= Ġtext Paint . measure Text ( text , Ġ 0 , Ġtext . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ= Ġtext Paint . desc ent () Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left Ġ+= Ġ( rect . width () Ġ- Ġrect F . right ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ+= Ġ( rect . height () Ġ- Ġrect F . bottom ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto X Ġ= Ġrect F . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Y Ġ= Ġrect F . top Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter X Ġ= Ġwidth Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y Ġ= Ġheight Ġ/ Ġ 2 f Ġ+ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ= ĠROT ATE _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . RIGHT Ġor ĠGr avity . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect Ġ= ĠRect ( offset , Ġoffset , Ġwidth Ġ+ Ġoffset , Ġheight Ġ+ Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F Ġ= ĠRect F ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . right Ġ= Ġtext Paint . measure Text ( text , Ġ 0 , Ġtext . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . bottom Ġ= Ġtext Paint . desc ent () Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . left Ġ+= Ġ( rect . width () Ġ- Ġrect F . right ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect F . top Ġ+= Ġ( rect . height () Ġ- Ġrect F . bottom ) Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto X Ġ= Ġrect F . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Y Ġ= Ġrect F . top Ġ- Ġtext Paint . as cent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter X Ġ= Ġwidth Ġ/ Ġ 2 f Ġ+ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Y Ġ= Ġheight Ġ/ Ġ 2 f Ġ+ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ= Ġ- ROT ATE _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" are Ġyou Ġok ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . rotate ( angle , Ġcenter X , Ġcenter Y ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Text ( text , Ġto X , Ġto Y , Ġtext Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æĺ¾ç¤º æĸĩæľ¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetText (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĺ¾ç¤º æĸĩæľ¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Text (@ String Res Ġid : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Text ( resources . getString ( id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text ( text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Text Ġ= Ġtext Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . equals ( final Text , ĠgetText ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġfinal Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åŃĹ ä½ĵ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget TextColor (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Paint . color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åŃĹ ä½ĵ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset TextColor ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getText Color () Ġ!= Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åŃĹ ä½ĵ å¤§å°ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetText Size (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Paint . text Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åŃĹ ä½ĵ å¤§å°ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Text Size ( size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Text Size ( Typed Value . COMPLEX _ UNIT _ SP , Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Text Size ( unit : ĠInt , Ġsize : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Size : ĠFloat Ġ= ĠTyped Value . apply Dimension ( unit , Ġsize , Ġresources . display Metrics ) ĊĠĠĠĠĠĠĠ Ġif Ġ( getText Size () Ġ!= Ġtext Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . text Size Ġ= Ġtext Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æĸĩæľ¬ æł·å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget TextStyle (): ĠType face ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext Paint . type face ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĸĩæľ¬ æł·å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset TextStyle ( tf : ĠType face ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getText Style () Ġ!== Ġtf ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint . type face Ġ= Ġtf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ èĥĮæĻ¯ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Color Background (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcolor Background ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® èĥĮæĻ¯ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Color Background ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getColor Background () Ġ!= Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Background Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Paint . color Ġ= Ġcolor Background ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĢ ¾ æĸ ľ éĩį å¿ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Gravity (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgravity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĢ ¾ æĸ ľ éĩį å¿ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Gravity ( gravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . gravity Ġ!= Ġgravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢĤ éħį å¸ĥå±Ģ åıį æĸ¹åĲĳ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . gravity Ġ= ĠGr avity . get Absolute Gravity ( gravity , Ġresources . configuration . layout Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå½ĵåīį æĺ¯åĲ¦ æĺ¯ ä¸ī è§Ĵ å½¢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Triangle (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtriangle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ è®¾ç½® æĪĲ ä¸ī è§Ĵ å½¢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Triangle ( triangle : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Triangle () Ġ!= Ġtriangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . triangle Ġ= Ġtriangle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį ä¸»é¢ĺ çļĦ å¼º è°ĥ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Accent Color (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠ Ġcontext . theme . resolve Attribute ( R . attr . color Accent , Ġtyped Value , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtyped Value . data ĊĠĠĠ Ġ} Ċ }