package Ġcom . ang cy o . behavior . effect Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . core . math . Math Utils . clamp Ċ import Ġandroidx . core . view . View Compat Ċ import Ġcom . ang cy o . behavior . Base Gesture Behavior Ċ import Ġcom . ang cy o . behavior . m H Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* Ġ èĥĮæĻ¯ æĶ¾ å¤§ ç¼© å°ı çļĦ è¡Įä¸º Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ @ Deprecated (" ä½¿çĶ¨ [ Link age Scale Behavior ]") Ċ open Ġclass ĠScale Behavior ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull Ċ ) Ġ: ĠBase Gesture Behavior < View >( context , Ġattribute Set ) Ġ{ ĊĊĠĠĠ Ġ/** æķĪæŀľ ä½ľ çĶ¨çļĦ çĽ®æłĩ , Ġä¸į è®¾ç½® å°±æĺ¯ Ġchild */ ĊĠĠĠ Ġvar Ġscale Target View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** æ¿Ģ æ´» é«ĺåº¦ åıĺåĮĸ */ ĊĠĠĠ Ġvar Ġenable Height Effect : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** æ¿Ģ æ´» Scale åıĺåĮĸ */ ĊĠĠĠ Ġvar Ġenable Scale Effect : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġscale Max Height : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġ/** æľĢå¤§ æĶ¾ å¤§ åĢ į æķ° */ ĊĠĠĠ Ġvar Ġmax Scale Ġ= Ġ 4 f ĊĊĠĠĠ Ġval Ġ_ max Height : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( scale Max Height Ġ> Ġ 0 ) Ġscale Max Height Ġelse Ġchild View . m H () ĊĊĠĠĠ Ġval Ġ_ target View : ĠView ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġscale Target View Ġ?: Ġchild View ĊĊĠĠĠ Ġval Ġ_ scale : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclamp ( 1 f Ġ+ Ġbehavior Scroll Y Ġ* Ġ 1 f Ġ/ Ġ_ max Height , Ġ 1 f , Ġmax Scale ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Log Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbehavior Scroll To Ġ= Ġ{ Ġx , Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L . i (" ->$ y Ġ$_ scale ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enable Scale Effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ target View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġ_ scale ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġscale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlayout Dep ends On ( ĊĠĠĠĠĠĠĠ Ġparent : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠView , ĊĠĠĠĠĠĠĠ Ġdependency : ĠView ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . layout Dep ends On ( parent , Ġchild , Ġdependency ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Height Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . layout Params . height Ġ== ĠViewGroup . LayoutParams . WRAP _ CONTENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . on Measure Child ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Width Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Used , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Height Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Used ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . m H () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . layout Params . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . on Measure Child ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Width Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Used , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Height Measure Spec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( height Used Ġ- Ġchild Height Ġ* Ġ(_ scale Ġ- Ġ 1 )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Nested Scroll ( ĊĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠView , ĊĠĠĠĠĠĠĠ Ġdirect Target Child : ĠView , ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġaxes : ĠInt , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart Nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirect Target Child , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxes , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġaxes Ġ== ĠView Compat . SCROLL _ AXIS _ VERTICAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Scroll ( ĊĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠView , ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġdx Cons umed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdy Cons umed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdx Un consumed : ĠInt , ĊĠĠĠĠĠĠĠ Ġdy Un consumed : ĠInt , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt , ĊĠĠĠĠĠĠĠ Ġconsumed : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Nested Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoord inator Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Cons umed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Cons umed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Un consumed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Un consumed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( dy Un consumed Ġ!= Ġ 0 Ġ|| Ġbehavior Scroll Y Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Target Over Scroll ( target , Ġdy Un consumed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Scroll ( ĊĠĠĠĠĠĠĠ Ġe 1 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠ Ġe 2 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠ Ġdistance X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġdistance Y : ĠFloat ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġabs X Ġ= Ġabs ( distance X ) ĊĠĠĠĠĠĠĠ Ġval Ġabs Y Ġ= Ġabs ( distance Y ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(_ nested ScrollView Ġ== Ġnull Ġ&& Ġabs Y Ġ> Ġabs X Ġ&& Ġabs Y Ġ> Ġtouch S lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L . i (" scroll Ġ$ distance Y ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Target Over Scroll ( child View , Ġdistance Y . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Scroll ( e 1 , Ġe 2 , Ġdistance X , Ġdistance Y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Finish ( parent : ĠCoord inator Layout , Ġchild : ĠView , Ġev : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Touch Finish ( parent , Ġchild , Ġev ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Touch Hold Ġ&& Ġ_ nested ScrollView Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åľ¨ éĿŀ nested Ġscroll Ġ è§ĨåĽ¾ ä¸Ĭ æ»ļ åĬ¨ è¿ĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Scroll To ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Nested Scroll ( ĊĠĠĠĠĠĠĠ Ġcoord inator Layout : ĠCoord inator Layout , ĊĠĠĠĠĠĠĠ Ġchild : ĠView , ĊĠĠĠĠĠĠĠ Ġtarget : ĠView , ĊĠĠĠĠĠĠĠ Ġtype : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop Nested Scroll ( coordinator Layout , Ġchild , Ġtarget , Ġtype ) ĊĠĠĠĠĠĠĠ Ġstart Scroll To ( 0 , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** çĽ®æłĩ Over çĬ¶æĢģ */ ĊĠĠĠ Ġopen Ġfun Ġon Target Over Scroll ( target : ĠView ?, Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll By ( 0 , Ġ- dy ) ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Height Effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ target View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }