package Ġcom . zz x . header layout _ kotlin Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . util . Typed Value .* Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . MATCH _ PARENT Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout . Behavior Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout . Default Behavior Ċ import Ġandroidx . core . animation . do On End Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . core . view . children Ċ import Ġcom . zz x . header layout _ kotlin . Header Layout . Scroll State Ċ import Ġcom . zz x . header layout _ kotlin . transformation .* Ċ Ċ /** Ċ Ġ* Ġ å¤´ éĥ¨ å¸ĥå±Ģ ï¼Į å®ļä¹ī äºĨ å¤´ éĥ¨ å¸ĥå±Ģ çļĦ äºĶ ä¸Ń çĬ¶æĢģ ï¼Į Ġ çĬ¶æĢģ ä¿¡æģ¯ è¯· çľĭ [ Scroll State ], Ċ Ġ* Ġåľ¨ æ»ĳ åĬ¨ è¿ĩç¨ĭä¸Ń ä¼ļ å°Ĩ æ»ĳ åĬ¨ çļĦ ä¸ĢäºĽ ä¿¡æģ¯ ä¼łéĢĴ ç»Ļ [ Transformation ], Ġ[ Transformation ] æĺ¯ Ċ Ġ* Ġ åŃĲ View éľĢè¦ģ è®¾ç½® çļĦ ï¼Į è®¾ç½® äºĨ [ Transformation ] çļĦ åŃĲ View åĪĻ ä¼ļ æİ¥æĶ¶ åĪ° [ Header Layout ] æ»ĳ åĬ¨ æĹ¶çļĦ ä¸ĢäºĽ Ċ Ġ* Ġ ä¿¡æģ¯ ï¼Į å¦Ĥ æ»ĳ åĬ¨ è·Ŀç¦» dy çŃī ãĢĤ åŃĲ View åĪĻ åı¯ä»¥ æł¹æį® è¿ĻäºĽ ä¿¡æģ¯ æĿ¥ åģļ çĽ¸åºĶ çļĦ æĶ¹åıĺ ä»¥ è¾¾ åĪ° èģĶ åĬ¨ çļĦ æķĪæŀľ Ċ Ġ* Ġ@ author Ġz zx Ċ Ġ* Ġ@ create At Ġ 1 9 - 5 - 1 5 Ċ Ġ*/ Ċ @ Default Behavior ( Header Layout . Header Layout Behavior :: class ) Ċ class ĠHeader Layout Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ), ĠCoord inator Layout . Attached Behavior Ġ{ ĊĊĠĠĠ Ġvar ĠmaxHeight Ġ= Ġ 0 ĊĊĠĠĠ Ġvar ĠminHeight Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġextend Height Ġ= ĠDEFAULT _ EXT END _ HEIGHT ĊĊĠĠĠ Ġvar Ġextend Height Fraction Ġ= Ġ 0 . 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġscroll State Ġ= ĠScroll State . STATE _ MAX _ HEIGHT ĊĊĠĠĠ Ġvar Ġhas Layout ed Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġon Fl ing Max Height : Ġ(( Header Layout ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Header Layout ) ĊĠĠĠĠĠĠĠ Ġval Ġextend Height Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠ Ġval Ġhas Value Ġ= Ġa . getValue ( R . style able . Header Layout _ extend _ height , Ġextend Height Value ) ĊĠĠĠĠĠĠĠ Ġif Ġ( hasValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Height Value . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ FR ACTION Ġ-> Ġextend Height Fraction Ġ= Ġget Fraction ( 1 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ FLOAT Ġ-> Ġextend Height Fraction Ġ= Ġfloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ DIMENSION Ġ-> Ġextend Height Ġ= Ġget Dimension ( getDisplay Metrics ( context )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Layout ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Display Metrics ( context : ĠContext ): ĠDisplay Metrics Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġ( context . getSystem Service ( Service . WINDOW _ SERVICE ) Ġas ĠWindow Manager ). default Display . get Metrics ( display Metrics ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdisplay Metrics ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠScroll State Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æĶ¶ ç¼© åĪ°äºĨ æľĢå°ı é«ĺåº¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠSTATE _ MIN _ HEIGHT , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġåľ¨ æľĢå°ı é«ĺåº¦ ä¸İ æľĢå¤§ é«ĺåº¦ ä¹ĭéĹ´ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠSTATE _ NORMAL _ PROCESS , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ä¼ ¸ å±ķ åĪ°äºĨ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠSTATE _ MAX _ HEIGHT , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæĭ ĵ é«ĺ ï¼Į åľ¨ æľĢå¤§ é«ĺåº¦ ä¸İ æĭ ĵ å±ķ æľĢå¤§ é«ĺåº¦ ä¹ĭéĹ´ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠSTATE _ EXT END _ PROCESS , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĪ°äºĨ æĭ ĵ å±ķ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠSTATE _ EXT END _ MAX _ END ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ ĠmaxHeight Ġ= Ġmeasured Height ĊĠĠĠĠĠĠĠ Ġif Ġ( extend Height Fraction Ġ!= Ġ 0 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Height Ġ= Ġ( max Height Ġ* Ġextend Height Fraction ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( max Height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" the Ġheight Ġof ĠHeader Layout Ġcan 't Ġbe Ġ 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Layout ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¡¨ç¤º æĺ¯ çĶ± request Layout å¼ķ åıĳ çļĦ ï¼Į ä¸įéľĢè¦ģ éĩįæĸ° å¸ĥå±Ģ åŃĲ View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġchildren ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( child . layout Params Ġas ĠLayout Params ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sticky Until Exit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Top Ġ= ĠminHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠminHeight Ġ+= Ġchild . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġoffset Child ( child : ĠView , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( child . layout Params Ġas ĠLayout Params ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sticky Until Exit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġun Cons umed Dy Ġ= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dy Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( min Top Offset Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dy Ġ+ Ġmin Top Offset Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Cons umed Dy Ġ= Ġdy Ġ+ Ġmin Top Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Top Offset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Top Offset Ġ+= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Cons umed Dy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un Cons umed Dy Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . offset Top And Bottom ( child , Ġ- un Cons umed Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . top Ġ== Ġmin Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Top Offset Ġ+= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Cons umed Dy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( child . top Ġ- Ġdy Ġ< Ġmin Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Cons umed Dy Ġ= Ġchild . top Ġ- Ġmin Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Top Offset Ġ= Ġdy Ġ- Ġ( child . top Ġ- Ġmin Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . offset Top And Bottom ( child , Ġ- un Cons umed Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . offset Top And Bottom ( child , Ġ- dy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate LayoutParams ( attrs : ĠAttributeSet ?): ĠLayout Params Ġ= ĠLayout Params ( context , Ġattrs ) ĊĠĠĠ Ġoverride Ġfun Ġgenerate Default LayoutParams (): ĠLayout Params Ġ= ĠLayout Params ( MATCH _ PARENT , ĠMATCH _ PARENT ) ĊĠĠĠ Ġoverride Ġfun Ġgenerate LayoutParams ( lp : ĠViewGroup . LayoutParams ?): ĠViewGroup . LayoutParams Ġ= ĊĠĠĠĠĠĠĠ ĠLayout Params ( super . generate LayoutParams ( lp )) ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Behavior (): ĠBehavior < *> Ġ= ĠHeader Layout Behavior ( context ) ĊĊĠĠĠ Ġprivate Ġfun Ġdispatch Transformation Be haviors ( scroll State : ĠScroll State , Ġdy : ĠInt , Ġpercent : ĠFloat Ġ= Ġ 1 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġchildren ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġchild . layout Params Ġas ĠLayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Params . transform ations Ġ!= Ġnull Ġ&& Ġlayout Params . transform ations !!. size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( behavior Ġin Ġlayout Params . transform ations !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( scroll State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll State . STATE _ MIN _ HEIGHT Ġ-> Ġbehavior . on State Min Height ( child , Ġthis , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll State . STATE _ NORMAL _ PROCESS Ġ-> Ġbehavior . on State Normal Process ( child , Ġthis , Ġpercent , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll State . STATE _ MAX _ HEIGHT Ġ-> Ġbehavior . on State Max Height ( child , Ġthis , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll State . STATE _ EXT END _ PROCESS Ġ-> Ġbehavior . on State Extend Process ( child , Ġthis , Ġpercent , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll State . STATE _ EXT END _ MAX _ END Ġ-> Ġbehavior . on State Extend Max End ( child , Ġthis , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠHeader Layout Behavior ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠBehavior < Header Layout >( context , Ġattrs ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġchild Un Cons umed Dy Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Back Animation Do Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġback Animation : ĠValue Animator ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcan Accept Fl ing Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcan Accept Fl ing Callback Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcan Accept Scroll Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild : ĠHeader Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirect Target Child : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxes : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View Compat . SCROLL _ AXIS _ VERTICAL Ġand Ġaxes Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Un Cons umed Dy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Accept Fl ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Accept Scroll Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Back Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġreset Back Animation () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Animation ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Animation !!. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Back Animation Do Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Layout Child ( parent : ĠCoord inator Layout , Ġchild : ĠHeader Layout , Ġlayout Direction : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( child . has Layout ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç¬¬ ä¸Ģæ¬¡ å¸ĥå±Ģ åĬłè½½ å®ĮæĪĲ ä¹ĭåĲİ ï¼Į åĽł request Layout éĢł æĪĲ çļĦ åĨį æ¬¡ layout åºĶ æĺ¯ ä¸Ĭ ä¸Ģæ¬¡ çļĦ ä½įç½® ï¼Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠéľĢè¦ģ ä¿ĿæĮģ æ»ĳ åĬ¨ åĲİçļĦ åİŁ æł· ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout ( child . left , Ġchild . top , Ġchild . right , Ġchild . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Layout Child ( parent , Ġchild , Ġlayout Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nested Pre Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild : ĠHeader Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed : ĠInt Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dy Ġ> Ġ 0 Ġ&& Ġchild . scroll State Ġ> ĠScroll State . STATE _ MIN _ HEIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æīĭ æĮĩ ä¸Ĭ æ»ĳ æĹ¶ ï¼Į Header Layout çļĦ scroll State å¤§äºİ æľĢå°ı é«ĺåº¦ çĬ¶æĢģ æīį æľīæķĪ æŀľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġpre Scroll Up ( child , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( dy Ġ< Ġ 0 Ġ&& Ġchild Un Cons umed Dy Ġ< Ġ 0 Ġ&& Ġcan Scroll Down ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æīĭ æĮĩ ä¸ĭ æ»ĳ æĹ¶ ï¼Į éľĢè¦ģ çŃī target Ġview æ»ĳ åĪ° é¡¶ éĥ¨ ä¸Ķ è¿ĺæľī æľª æ¶Ī èĢĹ å®Į çļĦ dy , æīį å°Ĩ æ»ĳ åĬ¨ äº¤ ç»Ļ Header Layout å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠView Compat . TYPE _ NON _ TO UCH Ġ&& Ġcan Accept Fl ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġpre Scroll Down ( child , Ġdy , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠView Compat . TYPE _ TO UCH Ġ&& Ġcan Accept Scroll ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed [ 1 ] Ġ= Ġpre Scroll Down ( child , Ġdy , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcan Scroll Down (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ! is Back Animation Do ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æīĭ æĮĩ ä¸ĭ æ»ĳ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġpre Scroll Down ( header Layout : ĠHeader Layout , Ġdy : ĠInt , Ġfl ing : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header Layout . scroll State Ġ>= ĠScroll State . STATE _ EXT END _ MAX _ END ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fl ing Ġ&& Ġheader Layout . scroll State Ġ>= ĠScroll State . STATE _ MAX _ HEIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġconsumed Dy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Layout . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä¸Ĭ æ»ĳ åĪ°äºĨ æľĢå¤§ æĭ ĵ å±ķ é«ĺåº¦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ- Ġdy Ġ>= ĠmaxHeight Ġ+ Ġextend Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fl ing Ġ&& ĠMath . abs ( dy ) Ġ>= Ġ( max Height Ġ+ Ġextend Height Ġ- ĠminHeight )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ= Ġbottom Ġ- ĠminHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ MAX _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġconsumed Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ= Ġbottom Ġ- Ġ( max Height Ġ+ Ġextend Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠmaxHeight Ġ+ Ġextend Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ EXT END _ MAX _ END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġconsumed Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġun Cons umed Dy Ġ= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ< ĠmaxHeight Ġ&& Ġbottom Ġ- Ġdy Ġ< ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ-= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ NORMAL _ PROCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġ( bottom Ġ- ĠminHeight ). toFloat () Ġ/ Ġ( max Height Ġ- ĠminHeight ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġconsumed Dy , Ġpercent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ< ĠmaxHeight Ġ&& Ġbottom Ġ- Ġdy Ġ>= ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ= Ġbottom Ġ- ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Cons umed Dy Ġ= Ġdy Ġ- Ġconsumed Dy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ MAX _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġconsumed Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ>= ĠmaxHeight Ġ&& Ġbottom Ġ- Ġun Cons umed Dy Ġ> ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fl ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĳĬ è¯ī fl ing çĽĳåĲ¬ èĢħ ï¼Į å·² fl ing åĪ° max Height å¤Ħ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Accept Fl ing Callback Ġ&& Ġheader Layout . on Fl ing Max Height Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Layout . on Fl ing Max Height !!. invoke ( header Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Accept Fl ing Callback Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ+= Ġun Cons umed Dy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ-= Ġun Cons umed Dy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ EXT END _ PROCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġ( bottom Ġ- ĠmaxHeight ). toFloat () Ġ/ Ġextend Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġun Cons umed Dy , Ġpercent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconsumed Dy ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æīĭ æĮĩ ä¸Ĭ æ»ĳ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġpre Scroll Up ( header Layout : ĠHeader Layout , Ġdy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header Layout . scroll State Ġ== ĠScroll State . STATE _ MIN _ HEIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġconsumed Dy : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Layout . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä¸Ĭ æ»ĳ ä¹ĭåĲİ åĪ°äºĨ æľĢå°ı é«ĺåº¦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ- Ġdy Ġ<= ĠminHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ= Ġbottom Ġ- ĠminHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠminHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ MIN _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġconsumed Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġun Cons umed Dy Ġ= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä¹ĭåīį åľ¨ æľĢå¤§ ä¼ ¸ å±ķ é«ĺåº¦ ä¸İ æĭ ĵ å±ķ çļĦ é«ĺåº¦ ä¹ĭéĹ´ ï¼Į ä¸Ĭ æ»ĳ ä¹ĭåĲİ è¿ĺ åľ¨ æŃ¤ åĮº éĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ> ĠmaxHeight Ġ&& Ġbottom Ġ- Ġdy Ġ> ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ-= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġ( bottom Ġ- ĠmaxHeight ). toFloat () Ġ/ Ġextend Height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ EXT END _ PROCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġconsumed Dy , Ġpercent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åľ¨ æľĢå¤§ ä¼ ¸ å±ķ é«ĺåº¦ ä¸İ æĭ ĵ å±ķ çļĦ é«ĺåº¦ ä¹ĭéĹ´ , Ġä¸Ĭ æ»ĳ ä¹ĭåĲİ å°ı äºİ äºĨ æľĢå¤§ é«ĺåº¦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ> ĠmaxHeight Ġ&& Ġbottom Ġ- Ġdy Ġ<= ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ= Ġbottom Ġ- ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Cons umed Dy Ġ= Ġdy Ġ- Ġconsumed Dy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ MAX _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġconsumed Dy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åľ¨ æľĢå°ı é«ĺåº¦ åĴĮ æľĢå¤§ é«ĺåº¦ ä¹ĭéĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Ġ<= ĠmaxHeight Ġ&& Ġbottom Ġ- Ġun Cons umed Dy Ġ< ĠmaxHeight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Dy Ġ+= Ġun Cons umed Dy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ-= Ġun Cons umed Dy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġ( bottom Ġ- ĠminHeight ). toFloat () Ġ/ Ġ( max Height Ġ- ĠminHeight ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Ġ= ĠScroll State . STATE _ NORMAL _ PROCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Transformation Be haviors ( scroll State , Ġun Cons umed Dy , Ġpercent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconsumed Dy ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġback To Max Height ( header Layout : ĠHeader Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header Layout . scroll State Ġ<= ĠScroll State . STATE _ MAX _ HEIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Back Animation Do Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Accept Fl ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Accept Scroll Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Animation Ġ= ĠValue Animator . of Float ( header Layout . bottom . toFloat (), Ġheader Layout . max Height . toFloat ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġanim ator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġ( header Layout . bottom Ġ- Ġanim ator . animated Value Ġas ĠFloat ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Scroll Up ( header Layout , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Back Animation Do Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 2 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Animation !!. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nested Pre Fl ing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild : ĠHeader Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity X : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . scroll State Ġ< ĠScroll State . STATE _ MAX _ HEIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Accept Fl ing Callback Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Nested Pre Fl ing ( coordinator Layout , Ġchild , Ġtarget , Ġvelocity X , Ġvelocity Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild : ĠHeader Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Cons umed : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Cons umed : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Un consumed : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Un consumed : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Un Cons umed Dy Ġ= Ġdy Un consumed ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild : ĠHeader Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠView Compat . TYPE _ TO UCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback To Max Height ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠView Compat . TYPE _ NON _ TO UCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Accept Fl ing Callback Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLayout Params Ġ: ĠFrame Layout . LayoutParams Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtransformation Flags Ġ= ĠTRANS FORMATION _ NOTH ING ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcustom Transformation : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġtransformations : ĠMutable List < Transformation < View >> ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġmin Top Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġmin Top Offset Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġsticky Until Exit Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġconstructor ( width : ĠInt , Ġheight : ĠInt ) Ġ: Ġsuper ( width , Ġheight ) ĊĠĠĠĠĠĠĠ Ġconstructor ( width : ĠInt , Ġheight : ĠInt , Ġgravity : ĠInt ) Ġ: Ġsuper ( width , Ġheight , Ġgravity ) ĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠViewGroup . LayoutParams ) Ġ: Ġsuper ( source ) ĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠViewGroup . Margin LayoutParams ) Ġ: Ġsuper ( source ) ĊĠĠĠĠĠĠĠ Ġconstructor ( source : ĠFrame Layout . LayoutParams ) Ġ: Ġsuper ( source ) ĊĊĠĠĠĠĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Header Layout _ Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformation Flags Ġ= Ġa . getInt ( R . style able . Header Layout _ Layout _ transformation , Ġ 0 x 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsticky Until Exit Ġ= Ġa . getBoolean ( R . style able . Header Layout _ Layout _ sticky _ until _ exit , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Transformation Ġ= Ġa . getString ( R . style able . Header Layout _ Layout _ custom _ transformation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparse Transformation Be haviors ( transformation Flags , Ġcustom Transformation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è§£æŀĲ åľ¨ xml ä¸Ń è®¾ç½® çļĦ transformation _ behavior , è§£æŀĲ æĪĲ [ Transformation ] åŃĺåĤ¨ åľ¨ [ transform ations ] ä¸Ń ï¼Į ĊĠĠĠĠĠĠĠĠ Ġ* Ġåľ¨ behavior åĪĨ åıĳ æĹ¶ ä¼ļ éģįåİĨ [ transform ations ] è¿Ľè¡Į åĪĨ åıĳ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse Transformation Be haviors ( transformation Flags : ĠInt , Ġcustom Transformation : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transformation Flags Ġand ĠTRANS FORMATION _ NOTH ING Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformations Ġ= Ġmutable ListOf < Transformation < View >> (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transformation Flags Ġand ĠTRANS FORMATION _ ALPHA Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Alpha Transformation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transformation Flags Ġand ĠTRANS FORMATION _ EXT END _ SCALE Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Extend Scale Transformation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transformation Flags Ġand ĠTRANS FORMATION _ ALPHA _ CON TR ARY Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Alpha Contr ary Transformation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transformation Flags Ġand ĠTRANS FORMATION _ SCROLL Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Scroll Transformation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transformation Flags Ġand ĠTRANS FORMATION _ COMMON _ TOOL BAR Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Common Toolbar Transformation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( custom Transformation )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( reflect Custom Transformation ( custom Transformation !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åıį å°Ħ åĪĽå»º Transformation , Ġ å¹¶ä¸Ķ ä¸į æį ķ èİ· å¼Ĥå¸¸ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcustom Transformation ĠTransformation åŃĲ ç±»çļĦ åħ¨ è·¯å¾Ħ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġreflect Custom Transformation ( custom Transformation : ĠString ): ĠTransformation < View > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠClass . forName ( custom Transformation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclazz . getDeclared Constructor (). newInstance () Ġas ĠTransformation < View > ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRANS FORMATION _ NOTH ING Ġ= Ġ 0 x 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRANS FORMATION _ SCROLL Ġ= Ġ 0 x 0 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRANS FORMATION _ ALPHA Ġ= Ġ 0 x 0 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRANS FORMATION _ ALPHA _ CON TR ARY Ġ= Ġ 0 x 0 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRANS FORMATION _ EXT END _ SCALE Ġ= Ġ 0 x 0 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRANS FORMATION _ COMMON _ TOOL BAR Ġ= Ġ 0 x 1 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ EXT END _ HEIGHT Ġ= Ġ 2 0 0 ĊĠĠĠ Ġ} Ċ Ċ }