package Ġcom . ang cy o . behavior . link age Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġcom . ang cy o . behavior . Base Scroll Behavior Ċ import Ġcom . ang cy o . library . ex . calc Size Ċ import Ġcom . ang cy o . tab layout . clamp Ċ import Ġcom . ang cy o . widget . R Ċ import Ġcom . ang cy o . widget . base . m H Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* Ġ èĥĮæĻ¯ æĶ¾ å¤§ ç¼© å°ı çļĦ è¡Įä¸º . Ġ éħį åĲĪ [ Link age Header Behavior ] ä½¿çĶ¨ Ċ Ġ* ĠEmail : ang cy o @ 1 2 6 . com Ċ Ġ* Ġ@ author Ġang cy o Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 0 3 / 2 1 Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠSh en Z hen ĠO & M ĠCloud ĠCo ., ĠLtd . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ open Ġclass ĠLink age Scale Behavior ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull Ċ ) Ġ: ĠBase Link age Gradient Behavior ( context , Ġattribute Set ) Ġ{ ĊĊĠĠĠ Ġ/** æķĪæŀľ ä½ľ çĶ¨çļĦ çĽ®æłĩ , Ġä¸į è®¾ç½® å°±æĺ¯ Ġchild */ ĊĠĠĠ Ġvar Ġscale Target View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** æ¿Ģ æ´» é«ĺåº¦ åıĺåĮĸ */ ĊĠĠĠ Ġvar Ġenable Height Effect : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** æ¿Ģ æ´» Scale åıĺåĮĸ */ ĊĠĠĠ Ġvar Ġenable Scale Effect : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** å½ĵ æ»ļ åĬ¨ æ¯Ķ ä¾ĭ ( æ»ļ åĬ¨ è·Ŀç¦» / child é«ĺåº¦ ) å¤§äºİ çŃīäºİ æŃ¤ åĢ¼ æĹ¶ , Ġ å¼Ģå§ĭ ç¼© æĶ¾ . ĠéľĢè¦ģ åħĪ æ¿Ģ æ´» [ enable Scale Effect ] */ ĊĠĠĠ Ġvar Ġscale Threshold : ĠFloat Ġ= Ġ 0 . 3 f ĊĊĠĠĠ Ġ/** æ¯Ķ ä¾ĭ è®¡ç®Ĺ çļĦ åĪĨ æ¯į , Ġ- 1 æĺ¯ child çļĦ é«ĺåº¦ */ ĊĠĠĠ Ġvar Ġscale Max Height : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġ/** scale è®¡ç®Ĺ çļĦ é¢Ŀ å¤ĸ æİ§åĪ¶ åĽł åŃĲ , Ġ æİ§åĪ¶ ä¸ĭ æĭī è·Ŀç¦» ä¸İ é«ĺåº¦ åıĺåĮĸ çļĦ æ¯Ķ ä¾ĭ åĽł åŃĲ */ ĊĠĠĠ Ġvar Ġscale Factor : ĠFloat Ġ= Ġ 0 . 7 f ĊĊĠĠĠ Ġ/** æľĢå¤§ æĶ¾ å¤§ åĢ į æķ° */ ĊĠĠĠ Ġvar Ġmax Scale Ġ= Ġ 4 f ĊĊĠĠĠ Ġval Ġ_ max Height : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( scale Max Height Ġ> Ġ 0 ) Ġscale Max Height Ġelse ĠgetMax Gradient Height () ĊĊĠĠĠ Ġval Ġ_ target View : ĠView ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġscale Target View Ġ?: Ġchild View ĊĊĠĠĠ Ġval Ġ_ scale : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclamp ( 1 f Ġ+ Ġbehavior Scroll Y Ġ* Ġ 1 f Ġ/ Ġ_ max Height Ġ* Ġscale Factor , Ġ 1 f , Ġmax Scale ) ĊĊĠĠĠ Ġvar Ġ_ target View Id : ĠInt Ġ= ĠView . NO _ ID ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Log Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attribute Set , ĠR . style able . Link age Scale Behavior _ Layout ) ĊĠĠĠĠĠĠĠ Ġenable Height Effect Ġ= Ġarray . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Link age Scale Behavior _ Layout _ layout _ enable _ height _ effect , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Height Effect ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġenable Scale Effect Ġ= Ġarray . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Link age Scale Behavior _ Layout _ layout _ enable _ scale _ effect , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Scale Effect ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠmaxHeight Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . getString ( R . style able . Link age Scale Behavior _ Layout _ layout _ scale _ max _ height ) ĊĠĠĠĠĠĠĠ ĠmaxHeight ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Max Height Ġ= Ġcalc Size ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmax Scale Ġ= Ġarray . get Float ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Link age Scale Behavior _ Layout _ layout _ max _ scale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Scale ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġscale Factor Ġ= Ġarray . get Float ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Link age Scale Behavior _ Layout _ layout _ scale _ factor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Factor ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġscale Threshold Ġ= Ġarray . get Float ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Link age Scale Behavior _ Layout _ layout _ scale _ threshold , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Threshold ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ_ target View Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . getResource Id ( R . style able . Link age Scale Behavior _ Layout _ layout _ scale _ view _ id , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠ Ġarray . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlayout Dep ends On ( ĊĠĠĠĠĠĠĠ Ġparent : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠView , ĊĠĠĠĠĠĠĠ Ġdependency : ĠView ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . layout Dep ends On ( parent , Ġchild , Ġdependency ) ĊĠĠĠĠĠĠĠ Ġscale Target View Ġ= Ġchild . findViewById (_ target View Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure Child ( ĊĠĠĠĠĠĠĠ Ġparent : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠView , ĊĠĠĠĠĠĠĠ Ġparent Width Measure Spec : ĠInt , ĊĠĠĠĠĠĠĠ Ġwidth Used : ĠInt , ĊĠĠĠĠĠĠĠ Ġparent Height Measure Spec : ĠInt , ĊĠĠĠĠĠĠĠ Ġheight Used : ĠInt ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure Child ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Width Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Used , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Height Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Used ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Height Effect Ġ&& Ġ_ target Default Height Ġ> Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Height Ġ= Ġmax (_ scale Ġ- Ġ 1 f , Ġ 0 f ) Ġ* Ġ_ target Default Height Ġ+ Ġ_ target Default Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout Params . height Ġ= Ġchild Height . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L . e (" height :$ child Height ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . on Measure Child ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Width Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Used , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Height Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Used ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ç¬¬ ä¸Ģæ¬¡ å¸ĥå±Ģ åĲİ , Ġ ä¿ĿåŃĺ target çļĦ é«ĺåº¦ , Ġ æĸ¹ä¾¿ ä¹ĭåĲİ æģ ¢å¤į . Ġå¦Ĥæŀľ ä¹ĭåĲİ æīĭåĬ¨ ä¿®æĶ¹ è¿ĩ target çļĦ é«ĺåº¦ , Ġ è¯· åĲĮæĹ¶ ä¿®æĶ¹ æŃ¤ åĢ¼ ĊĠĠĠ Ġvar Ġ_ target Default Height Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure Child After ( ĊĠĠĠĠĠĠĠ Ġparent : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠView , ĊĠĠĠĠĠĠĠ Ġparent Width Measure Spec : ĠInt , ĊĠĠĠĠĠĠĠ Ġwidth Used : ĠInt , ĊĠĠĠĠĠĠĠ Ġparent Height Measure Spec : ĠInt , ĊĠĠĠĠĠĠĠ Ġheight Used : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure Child After ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Width Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Used , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Height Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Used ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ(_ target Default Height Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ target Default Height Ġ= Ġ_ target View . m H () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æľĢå°ı å·® è·Ŀ éĩı , Ġ çĶ¨äºİ æİ§åĪ¶ [ request Layout ] ĊĠĠĠ Ġval Ġ_ min Gap Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġon Behavior Scroll To ( ĊĠĠĠĠĠĠĠ Ġscroll Behavior : ĠBase Scroll Behavior <* >, ĊĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠ Ġscroll Type : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Y Ġ= Ġbehavior Scroll Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Behavior Scroll To ( scroll Behavior , Ġx , Ġy , Ġscroll Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enable Height Effect Ġ&& Ġabs ( old Y Ġ- Ġy ) Ġ> Ġ_ min Gap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ target View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Behavior Scroll To ( scroll Behavior , Ġx , Ġy , Ġscroll Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ_ refresh Target Height () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ target View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( meas ured Height Ġ- Ġ_ target Default Height ) Ġ> Ġ_ min Gap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMax Gradient Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(_ target Default Height Ġ> Ġ 0 ) Ġ_ target Default Height Ġelse Ġ_ target View . m H () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġ_ last Percent : ĠFloat Ġ= Ġ- 1 f ĊĊĠĠĠ Ġoverride Ġfun Ġon Gradient ( percent : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// L . e (" percent :$ percent ") ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Scale Effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( percent Ġ>= Ġscale Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ target View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġmin ( 1 Ġ+ Ġpercent Ġ- Ġscale Threshold , Ġmax Scale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġscale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ target View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Height Effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ last Percent Ġ!= Ġpercent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ refresh Target Height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ last Percent Ġ= Ġpercent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }