package Ġcom . engine er . imit ate . ui . widget ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcom . engine er . imit ate . R Ċ Ċ open Ġclass ĠCustom Shadow Layout Ġ: ĠFrame Layout Ġ{ ĊĊĠĠĠ Ġvar Ġm Shadow Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġm Shadow Limit : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġvar Ġm Corner Radius : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġval Ġdelta FY Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġval Ġdelta FX Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġvar Ġleft Show : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġright Show : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġtop Show : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġbottom Show : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġm Force Invalidate Shadow Ġ= Ġfalse ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit View ( context , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit View ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit View ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Suggest ed Minimum Width (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Suggest ed Minimum Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ> Ġ 0 Ġ&& Ġh Ġ> Ġ 0 Ġ&& Ġ( background Ġ== Ġnull Ġ|| Ġm Force Invalidate Shadow )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Force Invalidate Shadow Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Compat ( w , Ġh ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Force Invalidate Shadow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Force Invalidate Shadow Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Compat ( right Ġ- Ġleft , Ġbottom Ġ- Ġtop ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinvalidate Shadow () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Force Invalidate Shadow Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Attributes ( context , Ġattrs ) ĊĠĠĠĠĠĠĠ Ġnotify Padding () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Padding () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Padding Ġ= Ġm Shadow Limit . toInt () ĊĠĠĠĠĠĠĠ Ġval Ġy Padding Ġ= Ġm Shadow Limit . toInt () ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġif Ġ( left Show ) Ġx Padding Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġif Ġ( top Show ) Ġy Padding Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġif Ġ( right Show ) Ġx Padding Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġif Ġ( bottom Show ) Ġy Padding Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġset Padding ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Background Compat ( w : ĠInt , Ġh : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġw Ġ= Ġw ĊĠĠĠĠĠĠĠ Ġvar Ġh Ġ= Ġh ĊĠĠĠĠĠĠĠ Ġw Ġ*= Ġdelta FX . toInt () ĊĠĠĠĠĠĠĠ Ġh Ġ*= Ġdelta FY . toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ> Ġ 0 Ġ&& Ġh Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġcreate Shadow Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Limit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . TRANSP ARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠBitmap Drawable ( resources , Ġbitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Attributes ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattr Ġ= Ġget Typed Array ( context , Ġattrs , ĠR . style able . Custom Shadow Layout ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// é»ĺè®¤ æĺ¯ æĺ¾ç¤º ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Show Ġ= Ġattr . getBoolean ( R . style able . Custom Shadow Layout _ panel _ left Show , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Show Ġ= Ġattr . getBoolean ( R . style able . Custom Shadow Layout _ panel _ right Show , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Show Ġ= Ġattr . getBoolean ( R . style able . Custom Shadow Layout _ panel _ bottom Show , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Show Ġ= Ġattr . getBoolean ( R . style able . Custom Shadow Layout _ panel _ top Show , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Corner Radius Ġ= Ġattr . get Dimension ( R . style able . Custom Shadow Layout _ panel _ corner Radius , Ġ 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Limit Ġ= Ġattr . get Dimension ( R . style able . Custom Shadow Layout _ panel _ shadow Limit , Ġ 3 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Shadow Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr . getColor ( R . style able . Custom Shadow Layout _ panel _ shadow Color , Ġ 0 x 2 a 0 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Typed Array ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġattribute Set : ĠAttributeSet ?, ĊĠĠĠĠĠĠĠ Ġattr : ĠInt Array ĊĠĠĠ Ġ): ĠTyped Array ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . obtain Styled Attributes ( attribute Set , Ġattr , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ä¸»è¦ģ ä½ľçĶ¨ ï¼ļ èİ·åıĸ åľĨ å½¢ çļĦ Ġbitmap ĊĠĠĠ Ġprivate Ġfun Ġcreate Shadow Bitmap ( ĊĠĠĠĠĠĠĠ Ġshadow Width : ĠInt , Ġshadow Height : ĠInt , Ġcorner Radius : ĠFloat , Ġshadow Radius : ĠFloat , ĊĠĠĠĠĠĠĠ Ġshadow Color : ĠInt , Ġfill Color : ĠInt ĊĠĠĠ Ġ): ĠBitmap Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠBitmap . create Bitmap ( shadow Width , Ġshadow Height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( output ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshadow Rect Ġ= ĠRect F ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Width Ġ- Ġshadow Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Height Ġ- Ġshadow Radius ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshadow Paint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġshadow Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġshadow Paint . color Ġ= Ġfill Color ĊĠĠĠĠĠĠĠ Ġshadow Paint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Paint . set Shadow Layer ( shadow Radius , Ġ 0 f , Ġ 0 f , Ġshadow Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( shadow Rect , Ġcorner Radius , Ġcorner Radius , Ġshadow Paint ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Shadow Color ( m Shadow Color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Shadow Color Ġ= Ġm Shadow Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Shadow Limit ( m Shadow Limit : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Shadow Limit Ġ= Ġm Shadow Limit ĊĠĠĠĠĠĠĠ Ġnotify Padding () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Corner Radius ( m Corner Radius : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Corner Radius Ġ= Ġm Corner Radius ĊĠĠĠ Ġ} Ċ }