package Ġcom . storm kid . k ui _ base . card Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Layer Drawable Ċ import Ġandroid . graphics . drawable . Shape Drawable Ċ import Ġandroid . graphics . drawable . shapes . Round Rect Shape Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . storm kid . k ui _ base . R Ċ import Ġcom . storm kid . k ui _ base . button . K ui Button Ċ import Ġcom . storm kid . k ui _ base . dim en . Dim en Utils Ċ Ċ /** Ċ æĽ´ åĬł çģ µ æ´» çļĦ card view Ċ @ author Ġke _ li Ċ @ date Ġ 2 0 1 8 / 9 / 2 8 Ċ Ġ*/ Ċ class ĠK ui Card Ġ: ĠLinearLayout Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æĺ¯ æĮīéĴ® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġis Button Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĺ ´ å½± å° º å¯ ¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpadding Dim en Ġ= ĠDim en Utils . dip 2 px ( context , Ġ 1 f ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcard åľĨ å¼ § ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġradius Ġ= ĠDim en Utils . dip 2 px ( context , Ġ 8 f ). toFloat () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcard è®¡ç®Ĺ æľĢç»Ī åľĨ å¼ § ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġinit Radius Ġ= Ġfloat ArrayOf ( radius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcard èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġcolor Ġ= ĠColor . WHITE ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcard Ġ éĺ ´ å½± èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġsh ade Color Ġ= ĠR . color . primary ĊĊĠĠĠ Ġprivate Ġval Ġbutton Ġ= ĠK ui Button ( context ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcard Ġ éĺ ´ å½± çļĦ æ¨¡å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġsh ade Mode Ġ= ĠSHA PE _ RIGHT _ BOTTOM ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpadding åĢ¼ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpadding Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġcontent Padding Left Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcontent Padding Right Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcontent Padding Top Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcontent Padding Bottom Ġ= Ġ 0 ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHA PE _ LEFT _ TOP Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHA PE _ LEFT _ BOTTOM Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHA PE _ RIGHT _ TOP Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHA PE _ RIGHT _ BOTTOM Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠALL Ġ= Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Shape Dr (@ Color Int Ġcolor : ĠInt ) Ġ= ĠShape Drawable (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠRound Rect Shape ( init Radius , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġwhen ( shade Mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSHA PE _ LEFT _ TOP Ġ-> set Padding ( padding Dim en , Ġpadding Dim en , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSHA PE _ LEFT _ BOTTOM Ġ-> set Padding ( padding Dim en , Ġ 0 , Ġ 0 , Ġpadding Dim en ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSHA PE _ RIGHT _ TOP Ġ-> set Padding ( 0 , Ġpadding Dim en , Ġpadding Dim en , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSHA PE _ RIGHT _ BOTTOM Ġ-> set Padding ( 0 , Ġ 0 , Ġpadding Dim en , Ġpadding Dim en ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠALL Ġ-> set Padding ( padding Dim en , Ġpadding Dim en , Ġpadding Dim en , Ġpadding Dim en ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĊĠĠĠ Ġ@ Suppress Lint (" Re cycle ") ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . K ui Card , Ġdef , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġa . get Dimension Pixel Offset ( R . style able . K ui Card _ card _ radius , ĠDim en Utils . dip 2 px ( context , Ġ 8 f )). toFloat () ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġa . getColor ( R . style able . K ui Card _ card _ bg , ĠColor . WHITE ) ĊĠĠĠĠĠĠĠ Ġsh ade Color Ġ= Ġa . getResource Id ( R . style able . K ui Card _ card _ shade , android . R . color . dark er _ gray ) ĊĠĠĠĠĠĠĠ Ġpadding Dim en Ġ= Ġa . get Dimension Pixel Offset ( R . style able . K ui Card _ e vel , ĠDim en Utils . dip 2 px ( context , Ġ 1 f )) ĊĠĠĠĠĠĠĠ Ġinit Radius Ġ= Ġfloat ArrayOf ( radius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius ) ĊĠĠĠĠĠĠĠ Ġis Button Ġ= Ġa . getBoolean ( R . style able . K ui Card _ is _ card _ button , false ) ĊĠĠĠĠĠĠĠ Ġsh ade Mode Ġ= Ġa . getInt ( R . style able . K ui Card _ shape _ mode , ĠSHA PE _ RIGHT _ BOTTOM ) ĊĊĠĠĠĠĠĠĠ Ġ// padding ĊĠĠĠĠĠĠĠ Ġpadding Ġ= Ġa . get Dimension Pixel Offset ( R . style able . K ui Card _ padding , 0 ) ĊĠĠĠĠĠĠĠ Ġcontent Padding Left Ġ= Ġa . get Dimension Pixel Offset ( R . style able . K ui Card _ padding _ left , 0 ) ĊĠĠĠĠĠĠĠ Ġcontent Padding Right Ġ= Ġa . get Dimension Pixel Offset ( R . style able . K ui Card _ padding _ right , 0 ) ĊĠĠĠĠĠĠĠ Ġcontent Padding Bottom Ġ= Ġa . get Dimension Pixel Offset ( R . style able . K ui Card _ padding _ bottom , 0 ) ĊĠĠĠĠĠĠĠ Ġcontent Padding Top Ġ= Ġa . get Dimension Pixel Offset ( R . style able . K ui Card _ padding _ top , 0 ) ĊĊĠĠĠĠĠĠĠ Ġbot ton Show () ĊĠĠĠĠĠĠĠ Ġbuild Draw () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Down Dr () Ġ= ĠShape Drawable (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠRound Rect Shape ( init Radius , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® card èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Card Bg (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġbuild Draw () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® éĺ ´ å½± èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Card Shade Color (@ Color Int Ġcolor : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġthis . shade Color Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® éĺ ´ å½± é«ĺåº¦ [ è¶Ĭ é«ĺ éĺ ´ å½± è¶Ĭ å¤§ ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset E vel ( dim en : Float ){ ĊĠĠĠĠĠĠĠ Ġthis . padding Dim en Ġ= ĠDim en Utils . dip 2 px ( context , dim en ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æĺ¯ card æĮīéĴ® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Button ( is Button : Boolean ){ ĊĠĠĠĠĠĠĠ Ġthis . is Button Ġ= Ġis Button ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® card åľĨ å¼ § ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Rad uis ( radius : Float ){ ĊĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġradius ĊĠĠĠĠĠĠĠ Ġinit Radius Ġ= Ġfloat ArrayOf ( radius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius , Ġradius ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® card çļĦ æĬķ å½± æ¨¡å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Mode ( mode : Int ){ ĊĠĠĠĠĠĠĠ Ġthis . shade Mode Ġ= Ġmode ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġprivate Ġfun Ġbuild Draw () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġbuild Shape Dr ( Color . parse Color ( ping Color (" 0 d "))) ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġbuild Shape Dr ( Color . parse Color ( ping Color (" 1 0 "))) ĊĠĠĠĠĠĠĠ Ġval Ġthree Ġ= Ġbuild Shape Dr ( Color . parse Color ( ping Color (" 1 2 "))) ĊĠĠĠĠĠĠĠ Ġval Ġfour Ġ= Ġbuild Shape Dr ( Color . parse Color ( ping Color (" 1 4 "))) ĊĠĠĠĠĠĠĠ Ġval Ġfive Ġ= Ġbuild Shape Dr ( Color . parse Color ( ping Color (" 1 6 "))) ĊĠĠĠĠĠĠĠ Ġval Ġsix Ġ= Ġbuild Down Dr () ĊĠĠĠĠĠĠĠ Ġval Ġlayer Drawable Ġ= ĠLayer Drawable ( array Of ( one , Ġtwo , Ġthree , Ġfour , Ġfive , Ġsix )) ĊĠĠĠĠĠĠĠ Ġthis . background Ġ= Ġlayer Drawable ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( padding Ġ> Ġ 0 ) Ġset Padding ( padding , Ġpadding , Ġpadding , Ġpadding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġset Padding ( content Padding Left , Ġcontent Padding Top , Ġcontent Padding Right , Ġcontent Padding Bottom ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġping Color ( alpha : ĠString )= StringBuffer (). let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠContext Compat . getColor ( context , shade Color ) ĊĠĠĠĠĠĠĠ Ġit . append ("# $ alpha ") ĊĠĠĠĠĠĠĠ Ġit . append ( get Hex ( Color . red ( color ))) ĊĠĠĠĠĠĠĠ Ġit . append ( get Hex ( Color . green ( color ))) ĊĠĠĠĠĠĠĠ Ġit . append ( get Hex ( Color . blue ( color ))) ĊĠĠĠĠĠĠĠ Ġit . toString () ĊĠĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġto Hex Char ( hex Value : ĠInt ): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( hex Value Ġin Ġ 0 .. 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( hex Value Ġ+ Ġ' 0 '. toInt ()). to Char () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( hex Value Ġ- Ġ 1 0 Ġ+ Ġ' A '. toInt ()). to Char () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Hex ( int : Int )= let { ĊĠĠĠĠĠĠĠ Ġvar Ġdecimal Ġ= Ġint ĊĠĠĠĠĠĠĠ Ġvar Ġhex Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġwhile Ġ( decimal Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhex Value Ġ= Ġdecimal Ġ% Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhex Ġ= Ġto Hex Char ( hex Value ) Ġ+ Ġhex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecimal Ġ/= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbutton çĬ¶æĢģ ä¸ĭçļĦ card çļĦ æĺ¾ç¤º æİ§åĪ¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbot ton Show (){ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Button ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . MATCH _ PARENT , LinearLayout . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( color == Color . WHITE ) color = Context Compat . getColor ( context , R . color . primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . set Bg Color ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh ade Color Ġ= ĠR . color . primary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . set Radius ( radius ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( button ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun Ġbutton View () Ġ= Ġbutton Ċ Ċ }