package Ġorg . fat til i . luck ym usic . ui . widget Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġorg . fat til i . luck ym usic . util . Array Util . toString Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ Ċ /** Ċ Ġ* Ġ 2 0 2 0 / 1 0 / 2 8 Ċ Ġ* Ġ@ author Ġd eng zh en li Ċ Ġ* Ġæ ¤ Ń åľĨ å¸ĥå±Ģ Ċ Ġ*/ Ċ class ĠO val Layout Ġ: ĠViewGroup Ġ{ ĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) Ġ{} ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġmeasure Children ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Mode Ġ= ĠMeasure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Mode Ġ= ĠMeasure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġif Ġ( width Mode Ġ== ĠMeasure Spec . AT _ MO ST Ġ&& Ġheight Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Width Ġ= ĠmaxWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Height Ġ= Ġtotal Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( group Width , Ġgroup Height ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( width Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( maxWidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( height Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġtotal Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchild Count ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Layout : Ġ$ child Count ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild View Ġ= Ġget Child At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġget Location ( i , Ġchild Count , Ġchild View , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Layout : Ġ" Ġ+ ĠtoString ( l )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild View . layout ( l [ 0 ], Ġl [ 1 ], Ġl [ 2 ], Ġl [ 3 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġpoint X Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġpoint Y Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġp Width Ġ= Ġ 1 0 0 ĊĠĠĠ Ġprivate Ġvar Ġp Height Ġ= Ġ 1 0 0 ĊĠĠĠ Ġprivate Ġvar Ġstart C Ġ= Ġ 2 7 0 ĊĠĠĠ Ġprivate Ġvar Ġend C Ġ= Ġ 3 6 0 ĊĠĠĠ Ġprivate Ġfun Ġget Location ( index : ĠInt , Ġn : ĠInt , Ġview : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġview . width ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġview . height ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġget Angle ( index , Ġn ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get Angle : Ġ$ angle ") ĊĠĠĠĠĠĠĠ Ġval Ġxy Ġ= Ġget O val ( p Width , Ġp Height , Ġangle ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get O val : Ġ" Ġ+ ĠtoString ( xy )) ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġleft Ġ+ Ġxy [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġbottom Ġ- Ġxy [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġx Ġ- Ġw Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġx Ġ+ Ġw Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġy Ġ- Ġh Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġy Ġ+ Ġh Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġint ArrayOf ( l , Ġt , Ġr , Ġb ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Angle ( index : ĠInt , Ġn : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc T Ġ= Ġ( end C Ġ- Ġstart C ) Ġ/ Ġn ĊĠĠĠĠĠĠĠ Ġreturn Ġstart C Ġ+ Ġindex Ġ* Ġc T Ġ+ Ġc T Ġ/ Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhttps :// www . math open ref . com / coord par amel lipse . html ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġa ĊĠĠĠĠ Ġ* Ġ@ param Ġb ĊĠĠĠĠ Ġ* Ġ@ param Ġt ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget O val ( a : ĠInt , Ġb : ĠInt , Ġt : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠInt Ġ= Ġ( a Ġ* Ġcos ( t . toDouble ())). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠInt Ġ= Ġ( b Ġ* Ġsin ( t . toDouble ())). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġint ArrayOf ( x , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠmaxWidth : ĠInt ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġchild Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠmaxWidth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Width Ġ= Ġget Child At ( i ). meas ured Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( maxWidth Ġ< Ġcurrent Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġcurrent Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠmaxWidth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtotal Height : ĠInt ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġchild Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Height Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Height Ġ+= Ġget Child At ( i ). meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtotal Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" V gtest " ĊĠĠĠ Ġ} Ċ }