package Ġcom . sup . dev . android . views . views . layouts Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View . Measure Spec .* Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . sup . dev . android . R Ċ import Ġcom . sup . dev . android . app . Sup Android Ċ import Ġcom . sup . dev . android . tools . Tools Android Ċ import Ġcom . sup . dev . android . tools . Tools Paint Ċ import Ġcom . sup . dev . android . tools . Tools Resources Ċ import Ġcom . sup . dev . android . tools . Tools View Ċ import Ġcom . sup . dev . java . tools . Tools Math Ċ Ċ open Ġclass ĠLayout Max Sizes Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull ) Ġ: ĠViewGroup ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġvar Ġon Measure Call : Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġvar Ġon Measure Finish : Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġprivate Ġvar ĠmaxWidth Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠmaxHeight Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġreserve Width : ĠInt ĊĠĠĠ Ġprivate Ġval Ġreserve Height : ĠInt ĊĠĠĠ Ġprivate Ġvar ĠmaxWidth Percent Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar ĠmaxHeight Percent Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġalways Max W Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġalways Max H Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġchild Always Max W Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġchild Always Max H Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġuse Screen Width As Parent Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġuse Screen Height As Parent Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġallow Child Max W Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġallow Child Max H Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġfade W Size Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfade H Size Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfade Color Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġignore Parent W Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġignore Parent H Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġis C ropped W Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis C ropped H Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ ĠSup Android . init Edit Mode ( this ) ĊĊĠĠĠĠĠĠĠ Ġset Will Not Draw ( false ) ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠgetContext (). obtain Styled Attributes ( attrs , ĠR . style able . Layout Max Sizes , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġa . get Dimension ( R . style able . Layout Max Sizes _ Layout Max Sizes _ maxWidth , ĠmaxWidth . toFloat ()). toInt () ĊĠĠĠĠĠĠĠ ĠmaxHeight Ġ= Ġa . get Dimension ( R . style able . Layout Max Sizes _ Layout Max Sizes _ max Height , ĠmaxHeight . toFloat ()). toInt () ĊĠĠĠĠĠĠĠ Ġreserve Width Ġ= Ġa . get Dimension ( R . style able . Layout Max Sizes _ Layout Max Sizes _ reserve Width , Ġ 0 F ). toInt () ĊĠĠĠĠĠĠĠ Ġreserve Height Ġ= Ġa . get Dimension ( R . style able . Layout Max Sizes _ Layout Max Sizes _ reserve Height , Ġ 0 F ). toInt () ĊĠĠĠĠĠĠĠ ĠmaxWidth Percent Ġ= Ġa . get Float ( R . style able . Layout Max Sizes _ Layout Max Sizes _ maxWidth Parent Percent , ĠmaxWidth Percent ) ĊĠĠĠĠĠĠĠ ĠmaxHeight Percent Ġ= Ġa . get Float ( R . style able . Layout Max Sizes _ Layout Max Sizes _ max Height Parent Percent , ĠmaxHeight Percent ) ĊĠĠĠĠĠĠĠ Ġalways Max W Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ always Max W , Ġalways Max W ) ĊĠĠĠĠĠĠĠ Ġalways Max H Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ always Max H , Ġalways Max H ) ĊĠĠĠĠĠĠĠ Ġchild Always Max W Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ child Always Max W , Ġchild Always Max W ) ĊĠĠĠĠĠĠĠ Ġchild Always Max H Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ child Always Max H , Ġchild Always Max H ) ĊĠĠĠĠĠĠĠ Ġuse Screen Width As Parent Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ use Screen Width As Parent , Ġuse Screen Width As Parent ) ĊĠĠĠĠĠĠĠ Ġuse Screen Height As Parent Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ use Screen Height As Parent , Ġuse Screen Height As Parent ) ĊĠĠĠĠĠĠĠ Ġfade W Size Ġ= Ġa . get Dimension ( R . style able . Layout Max Sizes _ Layout Max Sizes _ fade W Size , Ġfade W Size . toFloat ()). toInt () ĊĠĠĠĠĠĠĠ Ġfade H Size Ġ= Ġa . get Dimension ( R . style able . Layout Max Sizes _ Layout Max Sizes _ fade H Size , Ġfade H Size . toFloat ()). toInt () ĊĠĠĠĠĠĠĠ Ġfade Color Ġ= Ġa . getColor ( R . style able . Layout Max Sizes _ Layout Max Sizes _ fade Color , Ġfade Color ) ĊĠĠĠĠĠĠĠ Ġallow Child Max W Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ allow Child Max W , Ġallow Child Max W ) ĊĠĠĠĠĠĠĠ Ġallow Child Max H Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ allow Child Max H , Ġallow Child Max H ) ĊĠĠĠĠĠĠĠ Ġignore Parent W Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ ignore Parent W , Ġignore Parent W ) ĊĠĠĠĠĠĠĠ Ġignore Parent H Ġ= Ġa . getBoolean ( R . style able . Layout Max Sizes _ Layout Max Sizes _ ignore Parent H , Ġignore Parent H ) ĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġl : ĠInt , Ġt : ĠInt , Ġr : ĠInt , Ġb : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( i ). layout ( 0 , Ġ 0 , Ġget Child At ( i ). meas ured Width , Ġget Child At ( i ). meas ured Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Measure Call . invoke () ĊĠĠĠĠĠĠĠ Ġvar Ġw Ġ= Ġif Ġ( use Screen Width As Parent ) ĠTools Android . get Screen W () Ġelse Ġget Size ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar Ġh Ġ= Ġif Ġ( use Screen Height As Parent ) ĠTools Android . get Screen H () Ġelse Ġget Size ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġvar ĠmaxWidth X Ġ= Ġif Ġ( ignore Parent W Ġ|| Ġw Ġ== Ġ 0 ) ĠmaxWidth Ġelse ĠTools Math . min ( w , ĠmaxWidth ) ĊĠĠĠĠĠĠĠ Ġvar ĠmaxHeight X Ġ= Ġif Ġ( ignore Parent H Ġ|| Ġh Ġ== Ġ 0 ) ĠmaxHeight Ġelse ĠTools Math . min ( h , ĠmaxHeight ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( maxWidth Percent Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġ( w Ġ/ Ġ 1 0 0 f Ġ* ĠmaxWidth Percent ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth X Ġ= Ġif Ġ( maxWidth Ġ== Ġ 0 Ġ|| ĠmaxWidth Ġ> Ġarg ) Ġarg Ġelse ĠmaxWidth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( max Height Percent Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġ( h Ġ/ Ġ 1 0 0 f Ġ* ĠmaxHeight Percent ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight X Ġ= Ġif Ġ( max Height Ġ== Ġ 0 Ġ|| ĠmaxHeight Ġ> Ġarg ) Ġarg Ġelse ĠmaxHeight ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( maxWidth X Ġ> Ġ 0 ) Ġw Ġ= ĠmaxWidth X ĊĠĠĠĠĠĠĠ Ġif Ġ( max Height X Ġ> Ġ 0 ) Ġh Ġ= ĠmaxHeight X ĊĠĠĠĠĠĠĠ Ġvar Ġmax Child W Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Child H Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( i ). measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Measure Spec ( w , Ġif Ġ( child Always Max W ) ĠEX ACT LY Ġelse Ġif Ġ( allow Child Max W ) ĠUNS PE CI FIED Ġelse ĠAT _ MO ST ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Measure Spec ( h , Ġif Ġ( child Always Max H ) ĠEX ACT LY Ġelse Ġif Ġ( allow Child Max H ) ĠUNS PE CI FIED Ġelse ĠAT _ MO ST )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Child W Ġ= ĠMath . max ( getChild At ( i ). meas ured Width , Ġmax Child W ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Child H Ġ= ĠMath . max ( getChild At ( i ). meas ured Height , Ġmax Child H ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( max Child W Ġ> Ġw Ġ&& Ġmax Child W Ġ< Ġw Ġ+ Ġreserve Width ) Ġw Ġ+= Ġreserve Width ĊĠĠĠĠĠĠĠ Ġif Ġ( max Child H Ġ> Ġh Ġ&& Ġmax Child H Ġ< Ġh Ġ+ Ġreserve Height ) Ġh Ġ+= Ġreserve Height ĊĊĠĠĠĠĠĠĠ Ġval Ġresult W Ġ= Ġif Ġ( always Max W ) ĠmaxWidth X Ġelse Ġif Ġ( w Ġ== Ġ 0 Ġ|| ĠmaxWidth X Ġ== Ġ 0 ) Ġmax Child W Ġelse ĠMath . min ( w , Ġmax Child W ) ĊĠĠĠĠĠĠĠ Ġval Ġresult H Ġ= Ġif Ġ( always Max H ) ĠmaxHeight X Ġelse Ġif Ġ( h Ġ== Ġ 0 Ġ|| ĠmaxHeight X Ġ== Ġ 0 ) Ġmax Child H Ġelse ĠMath . min ( h , Ġmax Child H ) ĊĊĠĠĠĠĠĠĠ Ġis C ropped W Ġ= Ġmax Child W Ġ> Ġresult W ĊĠĠĠĠĠĠĠ Ġis C ropped H Ġ= Ġmax Child H Ġ> Ġresult H ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( result W , Ġresult H ) ĊĊĠĠĠĠĠĠĠ Ġon Measure Finish . invoke () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Foreground ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw Foreground ( canvas ) ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( fade Color Ġ== Ġ 0 Ġ&& Ġ( fade H Size Ġ!= Ġ 0 Ġ|| Ġfade W Size Ġ!= Ġ 0 ) Ġ&& Ġ( is C ropped H Ġ|| Ġis C ropped W )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade Color Ġ= ĠTools Resources . getColor ( R . color . focus ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fade W Size Ġ!= Ġ 0 Ġ&& Ġis C ropped W Ġ&& Ġfade Color Ġ!= Ġ 0 ) ĠTools Paint . gradient Line Left Right ( canvas , Ġfade Color , Ġfade W Size ) ĊĠĠĠĠĠĠĠ Ġif Ġ( fade H Size Ġ!= Ġ 0 Ġ&& Ġis C ropped H Ġ&& Ġfade Color Ġ!= Ġ 0 ) ĠTools Paint . gradient Line Bottom Top ( canvas , Ġfade Color , Ġfade H Size ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠSet ters ĊĠĠĠ Ġ// ĊĊĊĠĠĠ Ġfun Ġset Fade H Size ( dp : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fade H Size Ġ= ĠTools View . dp To Px ( dp ). toInt () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fade W Size ( dp : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fade W Size Ġ= ĠTools View . dp To Px ( dp ). toInt () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fade Color ( fade Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fade Color Ġ= Ġfade Color ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Max Width ( maxWidth Dp : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . maxWidth Ġ= ĠTools View . dp To Px ( maxWidth Dp ). toInt () ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Max Height ( max Height Dp : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . max Height Ġ= ĠTools View . dp To Px ( max Height Dp ). toInt () ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Always Max W ( b : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . always Max W Ġ= Ġb ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Child Always Max W ( child Always Max W : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . child Always Max W Ġ= Ġchild Always Max W ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Child Always Max H ( child Always Max H : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . child Always Max H Ġ= Ġchild Always Max H ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Always Max H ( b : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . always Max H Ġ= Ġb ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Max Height Parent Percent ( max Height Percent : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . max Height Percent Ġ= ĠmaxHeight Percent ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Max Width Parent Percent ( maxWidth Percent : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . maxWidth Percent Ġ= ĠmaxWidth Percent ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Use Screen Width As Parent ( use Screen Width As Parent : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . use Screen Width As Parent Ġ= Ġuse Screen Width As Parent ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Use Screen Height As Parent ( use Screen Height As Parent : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . use Screen Height As Parent Ġ= Ġuse Screen Height As Parent ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠGet ters ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġfun Ġis C ropped W () Ġ= Ġis C ropped W ĊĊĠĠĠ Ġfun Ġis C ropped H () Ġ= Ġis C ropped H ĊĊĠĠĠ Ġfun ĠgetMax Width () Ġ= ĠmaxWidth ĊĊĠĠĠ Ġfun ĠgetMax Height () Ġ= ĠmaxHeight ĊĊ Ċ } ĊĊ