package Ġcn . num eron . state ful . layout Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcn . num eron . common . State Ċ Ċ class ĠStateful Layout Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġc : ĠContext , ĊĠĠĠ Ġa : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġi : ĠInt Ġ= ĠR . attr . state ful Layout Style , ĊĠĠĠ Ġs : ĠInt Ġ= ĠR . style . State ful Layout Style Ċ ) Ġ: ĠFrame Layout ( c , Ġa , Ġi , Ġs ) Ġ{ ĊĊĠĠĠ Ġvar Ġstate : ĠState Ġ= ĠState . Empty ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġfield ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange View () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġempty Layout Id : ĠInt ĊĠĠĠ Ġprivate Ġval Ġloading Layout Id : ĠInt ĊĠĠĠ Ġprivate Ġval Ġfailure Layout Id : ĠInt ĊĊĠĠĠ Ġprivate Ġvar Ġanimation Enabled Ġ= Ġtrue ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Array Ġ= Ġc . obtain Styled Attributes ( a , ĠR . style able . State ful Layout , Ġi , Ġs ) ĊĊĠĠĠĠĠĠĠ Ġempty Layout Id Ġ= Ġt Array . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . State ful Layout _ state ful _ empty _ layout , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . state _ empty _ layout ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfailure Layout Id Ġ= Ġt Array . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . State ful Layout _ state ful _ failure _ layout , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . state _ failure _ layout ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġloading Layout Id Ġ= Ġt Array . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . State ful Layout _ state ful _ loading _ layout , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . state _ loading _ layout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ é»ĺè®¤ çĬ¶æĢģ ĊĠĠĠĠĠĠĠ Ġval Ġdefault State Ġ= Ġt Array . getInt ( R . style able . State ful Layout _ state , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® é»ĺè®¤ çļĦ çĬ¶æĢģ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . values (). first Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . ordinal Ġ== Ġdefault State ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// æĺ¯åĲ¦ åĲ¯åĬ¨ çĬ¶æĢģ åĪĩæį¢ åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġanimation Enabled Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt Array . getBoolean ( R . style able . State ful Layout _ animation _ enabled , Ġanimation Enabled ) ĊĊĠĠĠĠĠĠĠ Ġt Array . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Finish Inf late () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Finish Inf late () ĊĠĠĠĠĠĠĠ Ġ// æł¹æį® æĭ¥ æľīçļĦ çĬ¶æĢģ ï¼Į åĨ³å®ļ åĬłè½½ åī © ä½Ļ çļĦ çĬ¶æĢģ å¸ĥå±Ģ ĊĠĠĠĠĠĠĠ Ġval Ġ( has Empty , Ġhas Loading , Ġhas Failure ) Ġ= Ġcheck State () ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Layout Ġ= Ġinflater . inflate ( empty Layout Id , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( empty Layout , Ġreset LayoutParams State ( empty Layout , ĠState . Empty )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloading Layout Ġ= Ġinflater . inflate ( loading Layout Id , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( loading Layout , Ġreset LayoutParams State ( loading Layout , ĠState . Loading )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfailure Layout Ġ= Ġinflater . inflate ( failure Layout Id , Ġthis , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( failure Layout , Ġreset LayoutParams State ( failure Layout , ĠState . Failure )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck State (): ĠTrip le < Boolean , ĠBoolean , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhas Empty Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġhas Loading Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġhas Failure Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrepeat ( child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild View Ġ= Ġget Child At ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġchild View . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġlayout Params . state ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Empty Ġ= Ġstate Ġ== ĠState . Empty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Loading Ġ= Ġstate Ġ== ĠState . Loading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Failure Ġ= Ġstate Ġ== ĠState . Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( has Empty , Ġhas Loading , Ġhas Failure ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset LayoutParams State ( view : ĠView , Ġstate : ĠState ): ĠLayout Params Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold LayoutParams Ġ= Ġview . layout Params ĊĠĠĠĠĠĠĠ Ġif Ġ( old LayoutParams Ġis ĠLayout Params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old LayoutParams . state Ġ!= Ġstate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold LayoutParams . state Ġ= Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold LayoutParams ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġgenerate LayoutParams ( old LayoutParams ) ĊĠĠĠĠĠĠĠ Ġlayout Params . state Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange View () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( child Count ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild View Ġ= Ġget Child At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild LayoutParams Ġ= Ġchild View . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child LayoutParams . state Ġ== Ġthis . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( child View , Ġchild LayoutParams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide ( child View , Ġchild LayoutParams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow ( view : ĠView , Ġlayout Params : ĠLayout Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view . visibility Ġ!= ĠVIS IBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( animation Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . start Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . show Animation Res Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide ( view : ĠView , Ġlayout Params : ĠLayout Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view . visibility Ġ== ĠVIS IBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= Ġif Ġ( layout Params . invisible ) ĠIN VISIBLE Ġelse ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( animation Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . clear Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . start Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . hide Animation Res Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck LayoutParams ( p : ĠViewGroup . LayoutParams ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġp Ġis ĠLayout Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Default LayoutParams (): ĠLayout Params Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayout Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate LayoutParams ( attrs : ĠAttributeSet ?): ĠLayout Params Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayout Params ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate LayoutParams ( lp : ĠViewGroup . LayoutParams ?): ĠLayout Params Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( lp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMargin LayoutParams Ġ-> ĠLayout Params ( lp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewGroup . LayoutParams Ġ-> ĠLayout Params ( lp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġgenerate Default LayoutParams () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd View ( child : ĠView , Ġindex : ĠInt , Ġparams : ĠViewGroup . LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . addView ( child , Ġindex , Ġparams ) ĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġis ĠLayout Params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æł¹æį® å½ĵåīį çļĦ çĬ¶æĢģ ä¸İ child çļĦ å¸ĥå±Ģ å±ŀæĢ§ ï¼Į åĨ³å®ļ child æĺ¯åĲ¦ æĺ¾ç¤º ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . visibility Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ== Ġparams . state Ġ-> ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . invisible Ġ-> ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLayout Params Ġ: ĠFrame Layout . LayoutParams Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġinvisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġstate Ġ= ĠState . Success ĊĠĠĠĠĠĠĠ Ġvar Ġshow Animation Res Id Ġ= ĠR . anim . anim _ state _ layout _ show ĊĠĠĠĠĠĠĠ Ġvar Ġhide Animation Res Id Ġ= ĠR . anim . anim _ state _ layout _ hide ĊĊĠĠĠĠĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . State ful Layout _ Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvisible Ġ= Ġtyped Array . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . State ful Layout _ Layout _ state ful _ invisible , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvisible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Value Ġ= Ġtyped Array . getInt ( R . style able . State ful Layout _ Layout _ layout _ state , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . values ()[ state Value ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Animation Res Id Ġ= Ġtyped Array . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . State ful Layout _ Layout _ state ful _ animation _ show , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Animation Res Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Animation Res Id Ġ= Ġtyped Array . getResource Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . State ful Layout _ Layout _ state ful _ animation _ hide , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Animation Res Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( width : ĠInt , Ġheight : ĠInt , Ġstate : ĠState ) Ġ: Ġsuper ( width , Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( width : ĠInt , Ġheight : ĠInt ) Ġ: Ġsuper ( width , Ġheight ) ĊĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠViewGroup . LayoutParams ) Ġ: Ġsuper ( source ) ĊĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠMargin LayoutParams ) Ġ: Ġsuper ( source ) ĊĊĠĠĠ Ġ} Ċ Ċ }