package Ġcom . ys j . ui . floating bottomnavigation Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . sqrt ĊĊ Ċ /** Ċ Ġ* Ġæ º ¢ åĩº æµ ® åĬ¨ æķĪæŀľ çļĦ åºķ éĥ¨ å¯¼èĪª Ċ Ġ* Ġ< p > Ċ Ġ* Ġ@ author ĠY sj Ċ Ġ* ĠCreate Ġtime : Ġ 2 0 2 0 / 7 / 2 4 Ċ Ġ*/ Ċ class ĠFloating Bottom Navigation Ġ: ĠLinearLayout Ġ{ ĊĊĠĠĠ Ġ// Ġ================= == Ġ ç»ĺ åĪ¶ åıĤæķ° Ġ================= ==== ĊĊĠĠĠ Ġ// ĠåĪĨ åī² çº¿ é¢ľèī² ĊĠĠĠ Ġprivate Ġvar Ġm Divider Color : ĠInt ĊĊĠĠĠ Ġ// ĠåĪĨ åī² çº¿ çĶ» ç¬Ķ å®½åº¦ ĊĠĠĠ Ġprivate Ġvar Ġm Divider Stroke Width : ĠFloat ĊĊĠĠĠ Ġ// Ġ æľĢå¤§ æµ ® åĬ¨ ĊĠĠĠ Ġprivate Ġvar Ġm Max Floating : ĠFloat ĊĊĠĠĠ Ġ// Ġ================================================= ĊĊĠĠĠ Ġ// Ġ================= == Ġ ç»ĺ åĪ¶ å·¥åħ· Ġ================= ==== ĊĊĠĠĠ Ġprivate Ġval Ġm Divider Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġm Divider Path Ġ= ĠPath () ĊĊĠĠĠ Ġ// Ġ================================================= ĊĊĠĠĠ Ġ// Ġdebug ĠçļĦ è¾ ħ åĬ© ç»ĺ åĪ¶ ĊĠĠĠ Ġprivate Ġvar Ġm Debug Draw s : ĠMutable List < Runnable >? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġdebug ĠçļĦ çĶ» ç¬Ķ ĊĠĠĠ Ġprivate Ġvar Ġm Debug Paint : ĠPaint ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġ ç»ĳ å®ļçļĦ çĶ¨äºİ åĵįåºĶ æµ ® åĬ¨ æķĪæŀľ çļĦ ĠView Ġ ä»¬ ĊĠĠĠ Ġprivate Ġvar Ġm Bind Views Ġ= ĠArrayList < View >() ĊĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull , Ġ 0 ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åĬłè½½ èĩªå®ļä¹ī å±ŀæĢ§ ĊĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Floating Bottom Navigation ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Max Floating Ġ= Ġget Dimension ( R . style able . Floating Bottom Navigation _ max Floating , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Stroke Width Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Dimension ( R . style able . Floating Bottom Navigation _ divider Stroke Width , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Color Ġ= Ġget Color ( R . style able . Floating Bottom Navigation _ divider Color , ĠColor . GRAY ) ĊĠĠĠĠĠĠĠ Ġ}. recycle () ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . draw Color ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ Ġm Debug Paint ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( 0 f , Ġ 0 f , Ġwidth . toFloat (), Ġ 0 f , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ åĽłä¸º éľĢè¦ģ è£ ģ åĪĩ Ġview ĠçļĦ èĥĮæĻ¯ ï¼Į åĽłæŃ¤ è¯¥ è°ĥçĶ¨ éľĢè¦ģ åľ¨ Ġsuper . draw ( canvas ) Ġ åīį ĊĠĠĠĠĠĠĠ Ġdraw Divider ( canvas ) ĊĠĠĠĠĠĠĠ Ġsuper . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġm Debug Draw s ?. forEach Ġ{ Ġit . run () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĳå®ļ ä¸Ģä¸ª ĠView Ġä¸º æĿ¥ åĵįåºĶ æµ ® åĬ¨ æķĪæŀľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbind View ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. apply Ġ{ Ġm Bind Views . add ( this ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è§£ ç»ĳ ä¸Ģä¸ª ĠView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġun BindView ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. apply Ġ{ Ġm Bind Views . remove ( this ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĨ åī² çº¿ é¢ľèī² ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ attr Ġref ĠR . style able # Floating Bottom Navigation _ divider Color ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Divider Color ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Divider Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĪĨ åī² çº¿ çļĦ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Divider Color () Ġ= Ġm Divider Color ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĨ åī² çº¿ çļĦ çĶ» ç¬Ķ ç² Ĺ ç»Ĩ ï¼Ī px ï¼ī ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ attr Ġref ĠR . style able # Floating Bottom Navigation _ divider Stroke Width ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Divider Stroke Width ( divider Stroke Width : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Divider Stroke Width Ġ= Ġdivider Stroke Width ĊĠĠĠĠĠĠĠ Ġm Divider Paint . stroke Width Ġ= Ġm Divider Stroke Width ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åĪĨ åī² çº¿ çĶ» ç¬Ķ çļĦ ç² Ĺ ç»Ĩ ï¼Ī px ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Divider Stroke Width () Ġ= Ġm Divider Stroke Width ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æľĢå¤§ æµ ® åĬ¨ èĮĥåĽ´ ï¼Ī px ï¼ī ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ attr Ġref ĠR . style able # Floating Bottom Navigation _ max Floating ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Max Floating ( max Float : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Max Floating Ġ= Ġmax Float ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æľĢå¤§ æµ ® åĬ¨ èĮĥåĽ´ ï¼Ī px ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetMax Floating () Ġ= Ġm Max Floating ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ å¼ĢåĲ¯ Ġdebug ï¼Į å¼ĢåĲ¯ åĲİ åı¯ä»¥ çľĭåĪ° ç»ĺ åĪ¶ è¾ ħ åĬ© è§ĨåĽ¾ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġenable Ġä¸º Ġtrue Ġ åĪĻ å¼ĢåĲ¯ Ġdebug ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Debug Enable ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Debug Draw s Ġ= Ġif Ġ( enable ) ĠArrayList () Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġm Debug Paint Ġ= Ġif Ġ( enable ) ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . CY AN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 4 f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Divider ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Debug Draw s ?. clear () ĊĊĠĠĠĠĠĠĠ Ġm Divider Path . reset () ĊĠĠĠĠĠĠĠ Ġm Divider Path . moveTo (- m Divider Stroke Width , Ġm Max Floating ) ĊĠĠĠĠĠĠĠ Ġm Bind Views . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Real X Ġ= Ġget Child Real X ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Real Y Ġ= Ġget Child Real Y ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¼© æĶ¾ åĲİçļĦ å®½ é«ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Real Width Ġ= Ġit . width Ġ* Ġit . scale X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Real Height Ġ= Ġit . height Ġ* Ġit . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġview Ġä¸Ń å¿ĥ åĿĲæłĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġchild Real X Ġ+ Ġit . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġchild Real Y Ġ+ Ġit . height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤ĸ åľĨ åįĬ å¾Ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġsqrt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( child Real Width Ġ/ Ġ 2 Ġ* Ġchild Real Width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġchild Real Height Ġ/ Ġ 2 Ġ* Ġchild Real Height Ġ/ Ġ 2 ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æİ§åĪ¶ çĤ¹ ĠY Ġ åĿĲæłĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontrol Point Y Ġ= Ġif Ġ( y Ġ- Ġradius Ġ>= Ġm Max Floating ) Ġm Max Floating ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġy Ġ- Ġradius Ġ- Ġabs ( y Ġ- Ġradius Ġ- Ġm Max Floating ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¾¾ åĪ° åįĬ å¾Ħ çļĦ æ¯Ķ ä¾ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġ( m Max Floating Ġ- Ġcontrol Point Y ) Ġ/ Ġradius ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġif Ġ( p Ġ<= Ġ 0 ) Ġ 0 f Ġelse Ġ( radius Ġ- Ġchild Real Width Ġ/ Ġ 2 ) Ġ* Ġp Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Debug Draw s ?. add ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Debug Paint ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdr Ġ= Ġ 8 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¬¬ä¸Ģ æ®µ ï¼Į åİŁå§ĭ çĤ¹ ï¼ļ canvas . draw Circle ( x Ġ- Ġradius , Ġm Max Float , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Ġ- Ġradius Ġ- Ġr , Ġm Max Floating , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Ġ- Ġradius , Ġm Max Floating , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Ġ- Ġradius Ġ+ Ġr , Ġm Max Floating Ġ- Ġr , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¬¬äºĮ æ®µ æİ§åĪ¶ çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x , Ġcontrol Point Y , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¬¬ä¸ī æ®µ ï¼Į åİŁå§ĭ çĤ¹ ï¼ļ canvas . draw Circle ( x Ġ+ Ġradius , Ġm Max Float , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Ġ+ Ġradius Ġ- Ġr , Ġm Max Floating Ġ- Ġr , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Ġ+ Ġradius , Ġm Max Floating , Ġdr , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x Ġ+ Ġradius Ġ+ Ġr , Ġm Max Floating , Ġdr , Ġthis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x , Ġy , Ġradius , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Path . lineTo ( x Ġ- Ġradius , Ġm Max Float ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Path . lineTo ( x Ġ- Ġradius Ġ- Ġr , Ġm Max Floating ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Path . quad To ( x , Ġcontrol Point Y , Ġx Ġ+ Ġradius , Ġm Max Float ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Path . quad To ( x Ġ- Ġradius , Ġm Max Floating , Ġx Ġ- Ġradius Ġ+ Ġr , Ġm Max Floating Ġ- Ġr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Path . quad To ( x , Ġcontrol Point Y , Ġx Ġ+ Ġradius Ġ- Ġr , Ġm Max Floating Ġ- Ġr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Divider Path . quad To ( x Ġ+ Ġradius , Ġm Max Floating , Ġx Ġ+ Ġradius Ġ+ Ġr , Ġm Max Floating ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Divider Path . lineTo ( width Ġ+ Ġm Divider Stroke Width , Ġm Max Floating ) ĊĠĠĠĠĠĠĠ Ġm Divider Path . lineTo ( width Ġ+ Ġm Divider Stroke Width , Ġheight Ġ+ Ġm Divider Stroke Width ) ĊĠĠĠĠĠĠĠ Ġm Divider Path . lineTo (- m Divider Stroke Width , Ġheight Ġ+ Ġm Divider Stroke Width ) ĊĠĠĠĠĠĠĠ Ġm Divider Path . close () ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( m Divider Path , Ġm Divider Paint ) ĊĊĠĠĠĠĠĠĠ Ġm Debug Draw s ?. forEach Ġ{ Ġit . run () Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . clip Path ( m Divider Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åľ¨ è¯¥ ĠView Ġ èĬĤçĤ¹ ä¸ŃçļĦ åŃĲ ĠView Ġåľ¨ è¯¥ ĠView Ġä¸ŃçļĦ ĠX Ġ ä½įç½® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġ è¦ģ èİ·åıĸ çļĦ åŃĲ ĠView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Child Real X ( view : ĠView ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġthis ) Ġreturn Ġthis . x ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġview . x ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġview . parent ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠViewGroup Ġ&& Ġparent Ġ!= Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġget Child Real X ( parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ åľ¨ è¯¥ ĠView Ġ èĬĤçĤ¹ ä¸ŃçļĦ åŃĲ ĠView Ġåľ¨ è¯¥ ĠView Ġä¸ŃçļĦ ĠY Ġ ä½įç½® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġ è¦ģ èİ·åıĸ çļĦ åŃĲ ĠView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Child Real Y ( view : ĠView ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġthis ) Ġreturn Ġthis . y ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġview . y ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġview . parent ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠViewGroup Ġ&& Ġparent Ġ!= Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġget Child Real Y ( parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ» ç¬Ķ çŃī åıĤæķ° åĪĿå§ĭåĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Divider Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠPaint . ANTI _ ALIAS _ FLAG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġm Divider Color ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġm Divider Stroke Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Cap Ġ= ĠPaint . Cap . ROUND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Join Ġ= ĠPaint . Join . ROUND ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcompatibility () ĊĠĠĠĠĠĠĠ Ġ// Ġ ä½¿ åħ¶ ä¼ļ ç»ĺ åĪ¶ èĩªå·± ĊĠĠĠĠĠĠĠ Ġset Will Not Draw ( false ) ĊĠĠĠĠĠĠĠ Ġ// Ġ éĶģ å®ļ æ¨ ª åĲĳ æİĴ åĪĹ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠH ORIZONTAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿Ľè¡Į åħ¼ å®¹ æĢ§ è®¾ç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompatibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ä¸º ĠLAY ER _ TYPE _ SOFTWARE Ġï¼Į åĲ¦åĪĻ éĥ¨åĪĨ æīĭæľº ç»ĺ åĪ¶ æĹ¶ ä¼ļ éĹ ª çĥ ģ ĊĠĠĠĠĠĠĠ Ġset Layer Type ( LAYER _ TYPE _ SOFTWARE , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ĠLAY ER _ TYPE _ SOFTWARE Ġ åĲİ ï¼Į éľĢè¦ģ è®¾ç½® ä¸Ģ çĤ¹ éĢı æĺİ åº¦ ï¼Į åĲ¦åĪĻ éĥ¨åĪĨ æīĭæľº ä¼ļ æľī æĺ¾ç¤º éĹ®é¢ĺ ĊĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 0 . 9 9 9 f ĊĠĠĠ Ġ} Ċ }