package Ġcom . ang cy o . widget . layout Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Port er D uff X fer mode Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġcom . ang cy o . drawable . Draw Line Drawable Ċ import Ġcom . ang cy o . library . ex . calc Layout Width Height Ċ import Ġcom . ang cy o . tab layout . exact ly Measure Ċ import Ġcom . ang cy o . tab layout . screen Height Ċ import Ġcom . ang cy o . tab layout . screen Width Ċ import Ġcom . ang cy o . widget . R Ċ import Ġcom . ang cy o . widget . base . exact ly Ċ import Ġcom . ang cy o . widget . base . save Ċ import Ġkotlin . math . absolute Value Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠEmail : ang cy o @ 1 2 6 . com Ċ Ġ* Ġ@ author Ġang cy o Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 0 2 / 0 3 Ċ Ġ*/ Ċ class ĠR Layout Delegate Ġ: ĠLayout Delegate () Ġ{ ĊĊĠĠĠ Ġ/** é¢Ŀ å¤ĸ çļĦ åºķ å±Ĥ èĥĮæĻ¯ [ Drawable ] */ ĊĠĠĠ Ġvar Ġb Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . post Invalidate On Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . set Will Not Draw ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** æĶ¯æĮģ æľĢå¤§ é«ĺåº¦ [ com . ang cy o . library . ex . RK tx Kt . calc Size ] */ ĊĠĠĠ Ġvar Ġr Max Height : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġr Max Width : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġr Min Height : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġr Min Width : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġr Layout Width : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġr Layout Height : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** å®½ é«ĺ çļĦ æ¯Ķ ä¾ĭ [ 1 : 1 ] Ġ[ 1 : 2 . 5 ], Ġ å®½ é«ĺ å¿ħé¡» æľīä¸Ģä¸ª è¦ģ æĺ¯ 1 f */ ĊĠĠĠ Ġvar Ġlayout Dimension Ratio : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . request Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** å¸ĥå±Ģ èĴ Ļ å±Ĥ */ ĊĠĠĠ Ġvar Ġmask Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull Ġ&& Ġ_ mask Paint Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ mask Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Filter Bitmap Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . set Will Not Draw ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġ_ mask Paint : ĠPaint ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** æ¨ ª çº¿ ç»ĺ åĪ¶ */ ĊĠĠĠ Ġvar Ġdraw Line Drawable Ġ= ĠDraw Line Drawable () ĊĊĠĠĠ Ġoverride Ġfun Ġinit Attribute ( view : ĠView , Ġattribute Set : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . delegate View Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . context . obtain Styled Attributes ( attribute Set , ĠR . style able . R Layout Delegate ) ĊĊĠĠĠĠĠĠĠ Ġb Drawable Ġ= Ġtyped Array . get Drawable ( R . style able . R Layout Delegate _ r _ background ) ĊĠĠĠĠĠĠĠ Ġr Max Height Ġ= Ġtyped Array . getString ( R . style able . R Layout Delegate _ r _ max _ height ) ĊĠĠĠĠĠĠĠ Ġr Min Height Ġ= Ġtyped Array . getString ( R . style able . R Layout Delegate _ r _ min _ height ) ĊĠĠĠĠĠĠĠ Ġr Layout Height Ġ= Ġtyped Array . getString ( R . style able . R Layout Delegate _ r _ layout _ height ) ĊĠĠĠĠĠĠĠ Ġr Max Width Ġ= Ġtyped Array . getString ( R . style able . R Layout Delegate _ r _ max _ width ) ĊĠĠĠĠĠĠĠ Ġr Min Width Ġ= Ġtyped Array . getString ( R . style able . R Layout Delegate _ r _ min _ width ) ĊĠĠĠĠĠĠĠ Ġr Layout Width Ġ= Ġtyped Array . getString ( R . style able . R Layout Delegate _ r _ layout _ width ) ĊĠĠĠĠĠĠĠ Ġmask Drawable Ġ= Ġtyped Array . get Drawable ( R . style able . R Layout Delegate _ r _ layout _ mask _ drawable ) ĊĠĠĠĠĠĠĠ Ġlayout Dimension Ratio Ġ= Ġtyped Array . getString ( R . style able . R Layout Delegate _ r _ dimension _ ratio ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . R Layout Delegate _ r _ clip _ to _ outline )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . clip To Outline Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĊĠĠĠĠĠĠĠ Ġdraw Line Drawable . callback Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġdraw Line Drawable . init Attribute ( view . context , Ġattribute Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** å¸ĥå±Ģ èĴ Ļ çīĪ */ ĊĠĠĠ Ġfun Ġmask Layout ( canvas : ĠCanvas , Ġdraw Super : Ġ() Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ Ġmask Drawable ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġdelegate View . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġdelegate View . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Count Ġ= Ġdelegate View . save ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . padding Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . padding Top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ- Ġdelegate View . padding Right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġdelegate View . padding Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . save ( canvas , Ġ_ mask Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Super () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( save Count ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġdraw Super () ĊĊĠĠĠĠĠĠĠ Ġdraw Line Drawable . setBounds ( 0 , Ġ 0 , Ġdelegate View . meas ured Width , Ġdelegate View . meas ured Height ) ĊĠĠĠĠĠĠĠ Ġdraw Line Drawable . draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** [ b Drawable ] å±ŀæĢ§ æĶ¯æĮģ */ ĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb Drawable ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( 0 , Ġ 0 , Ġdelegate View . width , Ġdelegate View . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** è¿ĶåĽŀ xml ä¸Ń éħį åĲĪ çļĦ [ r _ layout _ width ] Ġ[ r _ layout _ height ] è§£æŀĲ åĲİçļĦ å®½ é«ĺ */ ĊĠĠĠ Ġfun Ġlayout Width Height (): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Width Ġ= Ġ( delegate View . parent Ġas ? ĠView )?. meas ured Width Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġparent Height Ġ= Ġ( delegate View . parent Ġas ? ĠView )?. meas ured Height Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Width Height Ġ= Ġdelegate View . context . calc Layout Width Height ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Layout Width , Ġr Layout Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Width Ġ> Ġ 0 ) Ġparent Width Ġelse Ġdelegate View . screen Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Height Ġ> Ġ 0 ) Ġparent Height Ġelse Ġdelegate View . screen Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlayout Width Height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** è¿ĶåĽŀ æĽ¿æį¢ åĲİçļĦ æµĭ éĩı å®½ é«ĺ Spec */ ĊĠĠĠ Ġfun Ġlayout Width Height Spec ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Spec : ĠInt Ġ= Ġwidth Measure Spec ĊĠĠĠĠĠĠĠ Ġvar Ġheight Spec : ĠInt Ġ= Ġheight Measure Spec ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Width Height Ġ= Ġlayout Width Height () ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġlayout Width Height [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġlayout Width Height [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ!= Ġ- 1 Ġ|| Ġheight Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® [ r _ layout _ width ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Spec Ġ= Ġexactly Measure ( width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( height Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® [ r _ layout _ height ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Spec Ġ= Ġexactly Measure ( height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġint ArrayOf ( width Spec , Ġheight Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** è¿ĶåĽŀ çº¦ æĿŁ äºĨ æ¯Ķ ä¾ĭ , æĽ¿æį¢ åĲİçļĦ æµĭ éĩı å®½ é«ĺ Spec */ ĊĠĠĠ Ġfun Ġlayout Dimension Ratio Spec ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġw Spec : ĠInt Ġ= Ġwidth Measure Spec ĊĠĠĠĠĠĠĠ Ġvar Ġh Spec : ĠInt Ġ= Ġheight Measure Spec ĊĊĠĠĠĠĠĠĠ Ġlayout Dimension Ratio ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// çº¦ æĿŁ äºĨ æ¯Ķ ä¾ĭ è®¡ç®Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġratio : ĠFloat Ġ= Ġ- 1 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Factor Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Factor Ġ= Ġ 1 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contains (" :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit (": "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Factor Ġ= Ġit [ 0 ]. toFloat OrNull () Ġ?: Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Factor Ġ= Ġit [ 1 ]. toFloat OrNull () Ġ?: Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġratio Ġ= Ġwidth Factor Ġ/ Ġheight Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Float OrNull ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Factor Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Factor Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġratio Ġ= Ġwidth Factor Ġ/ Ġheight Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 0 f ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Width Ġ= ĠView . Measure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Height Ġ= ĠView . Measure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Ratio Ġ= Ġv Width Ġ* Ġ 1 f Ġ/ Ġv Height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( raw Ratio Ġ- Ġratio ). absolute Value Ġ> Ġ 0 . 0 0 0 0 0 0 0 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ¯Ķ ä¾ĭ éľĢè¦ģ è°ĥæķ´ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View . Measure Spec . get Mode ( height Measure Spec ) Ġ== ĠView . Measure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»¥ é«ĺåº¦ ä½ľä¸º åŁº æķ° è°ĥæķ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Spec Ġ= Ġexactly (( v Height Ġ* Ġwidth Factor ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Spec Ġ= Ġexactly ( v Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( View . Measure Spec . get Mode ( width Measure Spec ) Ġ== ĠView . Measure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»¥ å®½åº¦ ä½ľä¸º åŁº æķ° è°ĥæķ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Spec Ġ= Ġexactly ( v Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Spec Ġ= Ġexactly (( v Width Ġ* Ġheight Factor ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġint ArrayOf ( w Spec , Ġh Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** [ r Max Height ] å±ŀæĢ§ æĶ¯æĮģ */ ĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Width Ġ= Ġ( delegate View . parent Ġas ? ĠView )?. meas ured Width Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġparent Height Ġ= Ġ( delegate View . parent Ġas ? ĠView )?. meas ured Height Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval ĠmaxWidth Height Ġ= Ġdelegate View . context . calc Layout Width Height ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Max Width , Ġr Max Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Width Ġ> Ġ 0 ) Ġparent Width Ġelse Ġdelegate View . screen Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Height Ġ> Ġ 0 ) Ġparent Height Ġelse Ġdelegate View . screen Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// --------------------- æľĢå¤§ å®½ é«ĺ éĻĲåĪ¶ ------------------------ ĊĊĠĠĠĠĠĠĠ Ġval ĠmaxWidth Ġ= ĠmaxWidth Height [ 0 ] ĊĠĠĠĠĠĠĠ Ġval ĠmaxHeight Ġ= ĠmaxWidth Height [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġis Width Out Ġ= ĠmaxWidth Ġ> Ġ- 1 Ġ&& Ġdelegate View . meas ured Width Ġ> ĠmaxWidth ĊĠĠĠĠĠĠĠ Ġval Ġis Height Out Ġ= ĠmaxHeight Ġ> Ġ- 1 Ġ&& Ġdelegate View . meas ured Height Ġ> ĠmaxHeight ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Width Out Ġ|| Ġis Height Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å®½ é«ĺ æľī ä¸Ģ é¡¹ è¶ħ æłĩ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĽ¿æį¢ å¸ĥå±Ģ åıĤæķ° , Ġåı¯ä»¥ æıĲ é«ĺ æĢ§èĥ½ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Spec Ġ= Ġif Ġ( is Width Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . layout Params . width Ġ= ĠmaxWidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexactly ( maxWidth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Measure Spec ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Spec Ġ= Ġif Ġ( is Height Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . layout Params . height Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexactly ( max Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Measure Spec ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ ä½¿çĶ¨ éĩįæĸ° æµĭ éĩı çļĦæĸ¹å¼ı , å¸ĥå±Ģ å°±ä¼ļ æ¯ıæ¬¡ éĥ½ èĩ³ å°ĳ æµĭ éĩı 2 æ¬¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . measure ( w Spec , Ġh Spec ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// --------------------- æ¯Ķ ä¾ĭ éĻĲåĪ¶ ------------------------ ĊĊĠĠĠĠĠĠĠ Ġ// æ¯Ķ ä¾ĭ è®¡ç®Ĺ ĊĠĠĠĠĠĠĠ Ġlayout Dimension Ratio ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġratio : ĠFloat Ġ= Ġ- 1 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Factor Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Factor Ġ= Ġ 1 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contains (" :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit (": "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Factor Ġ= Ġit [ 0 ]. toFloat OrNull () Ġ?: Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Factor Ġ= Ġit [ 1 ]. toFloat OrNull () Ġ?: Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġratio Ġ= Ġwidth Factor Ġ/ Ġheight Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Float OrNull ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Factor Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Factor Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġratio Ġ= Ġwidth Factor Ġ/ Ġheight Factor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Width Ġ= Ġdelegate View . meas ured Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Height Ġ= Ġdelegate View . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Ratio Ġ= Ġv Width Ġ* Ġ 1 f Ġ/ Ġv Height ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( raw Ratio Ġ- Ġratio ). absolute Value Ġ> Ġ 0 . 0 0 0 0 0 0 0 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ¯Ķ ä¾ĭ éľĢè¦ģ è°ĥæķ´ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Spec : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Spec : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View . Measure Spec . get Mode ( height Measure Spec ) Ġ== ĠView . Measure Spec . EX ACT LY Ġ&& Ġheight Factor Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»¥ é«ĺåº¦ ä½ľä¸º åŁº æķ° è°ĥæķ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Spec Ġ= Ġexactly (( v Height Ġ* Ġwidth Factor ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Spec Ġ= Ġexactly ( v Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{// width Factor Ġ== Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»¥ å®½åº¦ ä½ľä¸º åŁº æķ° è°ĥæķ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Spec Ġ= Ġexactly ( v Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Spec Ġ= Ġexactly (( v Width Ġ* Ġheight Factor ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . measure ( w Spec , Ġh Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparent Width Ġ= Ġ( delegate View . parent Ġas ? ĠView )?. meas ured Width Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġparent Height Ġ= Ġ( delegate View . parent Ġas ? ĠView )?. meas ured Height Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval ĠminWidth Height Ġ= Ġdelegate View . context . calc Layout Width Height ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Min Width , Ġr Min Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Width Ġ> Ġ 0 ) Ġparent Width Ġelse Ġdelegate View . screen Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Height Ġ> Ġ 0 ) Ġparent Height Ġelse Ġdelegate View . screen Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// --------------------- æľĢå°ı å®½ é«ĺ éĻĲåĪ¶ ------------------------ ĊĊĠĠĠĠĠĠĠ Ġval ĠminWidth Ġ= ĠminWidth Height [ 0 ] ĊĠĠĠĠĠĠĠ Ġval ĠminHeight Ġ= ĠminWidth Height [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( min Width Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . minimum Width Ġ= ĠminWidth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( min Height Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate View . minimum Height Ġ= ĠminHeight ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }