package Ġcom . example . android _ study . ui . material Design . coordinator Layout Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġcom . example . android _ study ._ base . cmd . Cmd Util Ċ Ċ /** Ċ Ġ* ĠAuthor : create Ġby ĠR hy thm Coder Ċ Ġ* ĠDate : 2 0 2 0 / 9 / 1 3 Ċ Ġ* ĠDescription : Ċ Ġ* Ċ Ġ* Ġ åıĤèĢĥ ï¼ļ https :// www . jian shu . com / p / 6 4 0 f 4 ef 0 5 fb 2 Ċ Ġ* Ċ Ġ* Ġ 1 . Ġ èĩªå®ļä¹ī ĠCoord inator Layout ĠçļĦ ĠBehavior ï¼Į Ġ æ³Ľ åŀĭ ä¸º è§Ĥ å¯Ł èĢħ ĠView Ġ( Ġ è¦ģ è·Ł çĿĢ åĪ« äºº åĬ¨ çļĦ éĤ£ ä¸ª Ġ), å¿ħé¡» éĩį åĨĻ ä¸¤ä¸ª æĸ¹æ³ķ ï¼Į layout Depend On åĴĮ on Dependent View Changed Ċ Ġ* Ċ Ġ* Ġ 2 . ãĢĬ æ·± åħ¥ çĲĨè§£ ĠBehavior ãĢĭ Ċ Ġ* Ġ 2 . 1 ĠâĢĶ âĢĶ æĭ ¦ æĪª ĠTouch Ġ äºĭä»¶ Ċ Ġ* Ġå½ĵ æĪĳä»¬ ä¸º ä¸Ģä¸ª ĠCoord inator Layout ĠçļĦ çĽ´æİ¥ åŃĲ ĠView Ġè®¾ç½® äºĨ ĠBehavior ĠæĹ¶ ï¼Į è¿Ļä¸ª ĠBehavior Ġ å°± èĥ½ æĭ ¦ æĪª åıĳçĶŁ åľ¨ è¿Ļä¸ª ĠView Ġ ä¸ĬçļĦ ĠTouch Ġ äºĭä»¶ ï¼Į éĤ£ä¹Ī å®ĥ æĺ¯ å¦Ĥä½ķ åģļ åĪ°çļĦ åĳ¢ ï¼Ł Ċ Ġ* Ġ å®ŀéĻħ ä¸Ĭ ï¼Į ĠCoord inator Layout Ġ éĩį åĨĻ äºĨ Ġon Intercept Touch Event () Ġæĸ¹æ³ķ ï¼Į å¹¶ åľ¨ åħ¶ä¸Ń ç»Ļ ĠBehavior Ġ å¼Ģ äºĨ ä¸ª åĲİ éĹ¨ ï¼Į è®© å®ĥ èĥ½å¤Ł åħĪ äºİ ĠView Ġæľ¬ èº« å¤ĦçĲĨ ĠTouch Ġ äºĭä»¶ ãĢĤ Ċ Ġ* Ġ åħ·ä½ĵ æĿ¥è¯´ ï¼Į ĠCoord inator Layout ĠçļĦ Ġon Intercept Touch Event () Ġæĸ¹æ³ķ ä¸Ń ä¼ļ éģįåİĨ æīĢæľī çĽ´æİ¥ åŃĲ ĠView Ġï¼Į Ċ Ġ* Ġ å¯¹äºİ ç»ĳå®ļ äºĨ ĠBehavior ĠçļĦ çĽ´æİ¥ åŃĲ ĠView Ġ è°ĥçĶ¨ ĠBehavior ĠçļĦ Ġon Intercept Touch Event () Ġæĸ¹æ³ķ ï¼Į èĭ¥ è¿Ļä¸ª æĸ¹æ³ķ è¿ĶåĽŀ Ġtrue ï¼Į Ċ Ġ* Ġ éĤ£ä¹Ī åĲİ ç»Ń æľ¬ è¯¥ çĶ± çĽ¸åºĶ åŃĲ ĠView Ġ å¤ĦçĲĨ çļĦ ĠTouch Ġ äºĭä»¶ éĥ½ä¼ļ äº¤ çĶ± ĠBehavior Ġ å¤ĦçĲĨ ï¼Į èĢĮ ĠView Ġæľ¬ èº« è¡¨ç¤º æĩ µ éĢ ¼ ï¼Į å®Įåħ¨ ä¸į çŁ¥éģĵ åıĳçĶŁ äºĨ ä»Ģä¹Ī ãĢĤ ĊĊ Ġ* Ġ 2 . 2 ĠâĢĶ âĢĶ æĭ ¦ æĪª æµĭ éĩı åıĬ å¸ĥå±Ģ Ċ Ġ* Ġ äºĨè§£ äºĨ ĠBehavior Ġæĺ¯ æĢİ åħ » æĭ ¦ æĪª ĠTouch Ġ äºĭä»¶ çļĦ ï¼Į æĥ³ å¿ħ å¤§å®¶ å·²ç»ı çĮ ľ åĩºæĿ¥ äºĨ å®ĥ æĭ ¦ æĪª æµĭ éĩı åıĬ å¸ĥå±Ģ äºĭä»¶ çļĦæĸ¹å¼ı ĠâĢĶ âĢĶ ĠCoord inator Layout Ġ éĩį åĨĻ äºĨ æµĭ éĩı åıĬ å¸ĥå±Ģ çĽ¸åħ³ çļĦæĸ¹æ³ķ å¹¶ ä¸º ĠBehavior Ġ å¼Ģ äºĨ ä¸ª åĲİ éĹ¨ ãĢĤ Ċ Ġ* Ġæ ² ¡ éĶĻ ï¼Į çľŁ çĽ¸ å°±æĺ¯ å¦Ĥ æŃ¤ ãĢĤ Ċ Ġ* ĠCoord inator Layout Ġåľ¨ Ġon Measure () Ġæĸ¹æ³ķ ä¸Ń ï¼Į ä¼ļ éģįåİĨ æīĢæľī çĽ´æİ¥ åŃĲ ĠView Ġï¼Į èĭ¥ è¯¥ åŃĲ ĠView Ġ ç»ĳå®ļ äºĨä¸Ģä¸ª ĠBehavior Ġï¼Į å°±ä¼ļ è°ĥçĶ¨ çĽ¸åºĶ ĠBehavior ĠçļĦ Ġon Measure Child () Ġæĸ¹æ³ķ ï¼Į Ċ Ġ* Ġ èĭ¥ æŃ¤ æĸ¹æ³ķ è¿ĶåĽŀ Ġtrue ï¼Į éĤ£ä¹Ī ĠCoord inator Layout Ġå¯¹ è¯¥ åŃĲ ĠView ĠçļĦ æµĭ éĩı å°± ä¸įä¼ļ è¿Ľè¡Į ãĢĤ è¿Ļæł· ä¸Ģ æĿ¥ ï¼Į ĠBehavior Ġ å°± æĪĲåĬŁ æİ¥ ç®¡ äºĨ å¯¹ ĠView ĠçļĦ æµĭ éĩı ãĢĤ Ċ Ġ* Ġ åĲĮ æł· ï¼Į Coordinator Layout Ġåľ¨ Ġon Layout () Ġæĸ¹æ³ķ ä¸Ń ä¹Ł åģļ äºĨ ä¸İ Ġon Measure () Ġæĸ¹æ³ķ ä¸Ń çĽ¸ ä¼¼ çļĦ äºĭ ï¼Į è®© ĠBehavior Ġ èĥ½å¤Ł æİ¥ ç®¡ å¯¹ çĽ¸åħ³ åŃĲ ĠView ĠçļĦ å¸ĥå±Ģ ãĢĤ Ċ Ġ*/ Ċ class ĠFollow Behavior ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: ĠCoord inator Layout . Behavior < TextView >( context , Ġattrs ) Ġ{ ĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿Ļä¸ª æĸ¹æ³ķ åľ¨ æ¯ıæ¬¡ on Dependent View Changed åīį è°ĥçĶ¨ ï¼Į dependency æĺ¯ parent çļĦ åħ¶ä¸Ń ä¸Ģä¸ª child View ï¼Į child åı¯ä»¥ éĢīæĭ© æĺ¯åĲ¦ ä¸İ åħ¶ å»ºç«ĭ äºĭä»¶ è®¢ éĺħ åħ³ç³» ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġæł¹æį® éĢ»è¾ĳ æĿ¥ åĪ¤æĸŃ è¿ĶåĽŀ åĢ¼ ï¼Į è¿ĶåĽŀ Ġfalse Ġè¡¨ç¤º ä¸į ä¾Ŀèµĸ ï¼Į è¿ĶåĽŀ Ġtrue Ġè¡¨ç¤º ä¾Ŀèµĸ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġåľ¨ ä¸Ģä¸ª äº¤ äºĴ è¡Įä¸º ä¸Ń ï¼Į Dependent ĠView ĠçļĦ åıĺåĮĸ åĨ³å®ļ äºĨ åı¦ ä¸Ģä¸ª çĽ¸åħ³ ĠView ĠçļĦ è¡Įä¸º ãĢĤ ĊĠĠĠĠ Ġ* Ġåľ¨ è¿Ļä¸ª ä¾ĭåŃĲ ä¸Ń ï¼Į ĠButton Ġ å°±æĺ¯ ĠDepend ent ĠView ï¼Į åĽłä¸º ĠTextView Ġ è·Ł éļı çĿĢ å®ĥ ãĢĤ ĊĠĠĠĠ Ġ* Ġ å®ŀéĻħ ä¸Ĭ ĠDepend ent ĠView Ġ å°± çĽ¸ å½ĵ äºİ æĪĳä»¬ åīį éĿ¢ ä»ĭç»į çļĦ è¢« è§Ĥ å¯Ł èĢħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlayout Dep ends On ( parent : ĠCoord inator Layout , Ġchild : ĠTextView , Ġdependency : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠCmd Util . i (" layout Dep ends On () ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdependency Ġis ĠButton ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġdependency Ġchange Ġ åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Dependent View Changed ( parent : ĠCoord inator Layout , Ġchild : ĠTextView , Ġdependency : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠCmd Util . v (" on Dependent View Changed () ") ĊĠĠĠĠĠĠĠ Ġchild . x Ġ= Ġdependency . x ; ĊĠĠĠĠĠĠĠ Ġchild . y Ġ= Ġdependency . y Ġ+ Ġ 2 0 0 ; ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }