package Ġcom . ang cy o . u iv iew . kotlin čĊč Ċ import Ġandroid . app . Activity č Ċ import Ġandroid . graphics . Rect č Ċ import Ġandroid . support . annotation . Layout Res č Ċ import Ġandroid . support . v 7 . widget . RecyclerView č Ċ import Ġandroid . view .* č Ċ import Ġandroid . view . animation . Animation č Ċ import Ġandroid . view . animation . Ant icip ate Interpolator č Ċ import Ġandroid . view . animation . Over shoot Interpolator č Ċ import Ġandroid . widget . EditText č Ċ import Ġcom . ang cy o . u iv iew . resources . Anim Util č Ċ import Ġcom . ang cy o . u iv iew . view . I View Animation Type č Ċ import Ġcom . ang cy o . u iv iew . widget . R Soft Input Layout čĊč Ċ /** čĊ Ġ* ĠKotlin ĠViewGroup çļĦ æī©å±ķ čĊ Ġ* ĠCreated Ġby Ġang cy o Ġon Ġ 2 0 1 7 - 0 7 - 2 6 . čĊ Ġ*/ č Ċ /** čĊ Ġ* Ġ è®¡ç®Ĺ child åľ¨ parent ä¸ŃçļĦ ä½įç½® åĿĲæłĩ , Ġ è¯· ç¡® ä¿Ŀ child åľ¨ parent ä¸Ń . čĊ Ġ* Ġ*/ č Ċ public Ġfun ĠViewGroup . getLocation In Parent ( child : ĠView , Ġlocation : ĠRect ) Ġ{ čĊĠĠĠ Ġvar Ġx Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġy Ġ= Ġ 0 čĊčĊĠĠĠ Ġvar Ġview Ġ= Ġchild čĊĠĠĠ Ġwhile Ġ( view . parent Ġ!= Ġthis ) Ġ{ čĊĠĠĠĠĠĠĠ Ġx Ġ+= Ġview . left čĊĠĠĠĠĠĠĠ Ġy Ġ+= Ġview . top čĊĠĠĠĠĠĠĠ Ġview Ġ= Ġview . parent Ġas ĠView čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġx Ġ+= Ġview . left čĊĠĠĠ Ġy Ġ+= Ġview . top čĊčĊĠĠĠ Ġlocation . set ( x , Ġy , Ġx Ġ+ Ġchild . meas ured Width , Ġy Ġ+ Ġchild . meas ured Height ) č Ċ } čĊč Ċ /** è¿ĶåĽŀ å½ĵ è½¯ éĶ® çĽĺ å¼¹ åĩº æĹ¶ , Ġ å¸ĥå±Ģ åĲĳ ä¸Ĭ åģı ç§» äºĨ å¤ļå°ĳ è·Ŀç¦» */ č Ċ public Ġfun ĠView . get Layout Offset Top Width Soft Input (): ĠInt Ġ{ čĊĠĠĠ Ġval Ġrect Ġ= ĠRect () čĊĠĠĠ Ġvar Ġoffset Top Ġ= Ġ 0 čĊčĊĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġthis . context Ġas ĠActivity čĊĠĠĠĠĠĠĠ Ġval Ġsoft Input Mode Ġ= Ġactivity . window . attributes . soft Input Mode čĊĠĠĠĠĠĠĠ Ġif Ġ( soft Input Mode Ġ== ĠWindow Manager . LayoutParams . SOFT _ INPUT _ ADJ UST _ PAN ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeyboard Height Ġ= ĠR Soft Input Layout . get Soft Keyboard Height ( this ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** åľ¨ ADJ UST _ PAN æ¨¡å¼ı ä¸ĭ , Ġ éĶ® çĽĺ å¼¹ åĩº æĹ¶ , Ġ åĿĲæłĩ éľĢè¦ģ è¿Ľè¡Į åģı ç§» */ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keyboard Height Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// return Ġtarget View čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfind Focus Ġ= Ġthis . find Focus () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( find Focus Ġis ĠEditText ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Focus . getWindow Visible Display Frame ( rect ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Top Ġ= Ġfind Focus . bottom Ġ- Ġrect . bottom čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġoffset Top č Ċ } čĊčĊč Ċ /** èİ·åıĸ touch åĿĲæłĩ å¯¹åºĶçļĦ RecyclerView , Ġå¦Ĥæŀľ æ²¡æľī åĪĻ null */ č Ċ public Ġfun ĠViewGroup . get Touch On RecyclerView ( touch Raw X : ĠFloat , Ġtouch Raw Y : ĠFloat ): ĠRecyclerView ? Ġ{ čĊĠĠĠ Ġreturn Ġfind RecyclerView ( this , Ġtouch Raw X , Ġtouch Raw Y , Ġget Layout Offset Top Width Soft Input ()) č Ċ } čĊč Ċ /** čĊ Ġ* Ġæł¹æį® touch åĿĲæłĩ , Ġè¿ĶåĽŀ touch çļĦ View čĊ Ġ*/ č Ċ public Ġfun ĠViewGroup . find View ( event : ĠMotion Event ): ĠView ? Ġ{ čĊĠĠĠ Ġreturn Ġfind View ( this , Ġevent . raw X , Ġevent . raw Y , Ġget Layout Offset Top Width Soft Input ()) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . find View ( touch Raw X : ĠFloat , Ġtouch Raw Y : ĠFloat ): ĠView ? Ġ{ čĊĠĠĠ Ġreturn Ġfind View ( this , Ġtouch Raw X , Ġtouch Raw Y , Ġget Layout Offset Top Width Soft Input ()) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . find View ( target View : ĠView Ġ/* åĪ¤æĸŃ éľĢè¦ģ ç»ĵæŀľ çļĦ View */, Ġtouch Raw X : ĠFloat , Ġtouch Raw Y : ĠFloat , Ġoffset Top : ĠInt Ġ= Ġ 0 ): ĠView ? Ġ{ čĊĠĠĠ Ġ/** éĶ® çĽĺ çļĦ é«ĺåº¦ */ čĊĠĠĠ Ġvar Ġtouch View : ĠView ? Ġ= Ġtarget View čĊĠĠĠ Ġval Ġrect Ġ= ĠRect () čĊčĊĠĠĠ Ġfor Ġ( i Ġin Ġchild Count Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġchild At Ġ= Ġget Child At ( i ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( child At . visibility Ġ!= ĠView . VISIBLE ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue čĊĠĠĠĠĠĠĠ Ġ} čĊč Ċ // ĠĠĠĠĠĠĠ Ġchild At . getWindow Visible Display Frame ( rect ) č Ċ // ĠĠĠĠĠĠĠ ĠL . e ("${ this }: 1 Ġ-> $ i Ġ$ rect ") čĊĠĠĠĠĠĠĠ Ġchild At . getGlobal Visible Rect ( rect ) č Ċ // ĠĠĠĠĠĠĠ ĠL . e ("${ this }: 2 Ġ-> $ i Ġ$ rect ") č Ċ // ĠĠĠĠĠĠĠ ĠL . e (" call : Ġ---------------- -- end Ġ-> Ġ") čĊĠĠĠĠĠĠĠ Ġrect . offset ( 0 , Ġ- offset Top ) čĊčĊĠĠĠĠĠĠĠ Ġfun Ġcheck ( view : ĠView ): ĠView ? Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . visibility Ġ== ĠView . VISIBLE Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . meas ured Height Ġ!= Ġ 0 Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . meas ured Width Ġ!= Ġ 0 Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view . left Ġ!= Ġview . right ) Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view . top Ġ!= Ġview . bottom ) Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect . contains ( touch Raw X . toInt (), Ġtouch Raw Y . toInt ())) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( child At Ġis ĠViewGroup Ġ&& Ġchild At . child Count Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult View Ġ= Ġchild At . find View ( target View , Ġtouch Raw X , Ġtouch Raw Y , Ġoffset Top ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result View Ġ!= Ġnull Ġ&& Ġresult View Ġ!= Ġtarget View ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch View Ġ= Ġresult View čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġcheck ( child At ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch View Ġ= Ġchild At čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġcheck ( child At ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch View Ġ= Ġchild At čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġtouch View č Ċ } čĊč Ċ public Ġfun ĠViewGroup . find RecyclerView ( target View : ĠView Ġ/* åĪ¤æĸŃ éľĢè¦ģ ç»ĵæŀľ çļĦ View */, Ġtouch Raw X : ĠFloat , Ġtouch Raw Y : ĠFloat , Ġoffset Top : ĠInt Ġ= Ġ 0 ): ĠRecyclerView ? Ġ{ čĊĠĠĠ Ġ/** éĶ® çĽĺ çļĦ é«ĺåº¦ */ čĊĠĠĠ Ġvar Ġtouch View : ĠRecyclerView ? Ġ= Ġnull čĊĠĠĠ Ġval Ġrect Ġ= ĠRect () čĊčĊĠĠĠ Ġfor Ġ( i Ġin Ġchild Count Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġchild At Ġ= Ġget Child At ( i ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( child At . visibility Ġ!= ĠView . VISIBLE ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġchild At . getGlobal Visible Rect ( rect ) čĊĠĠĠĠĠĠĠ Ġrect . offset ( 0 , Ġ- offset Top ) čĊčĊĠĠĠĠĠĠĠ Ġfun Ġcheck ( view : ĠView ): ĠView ? Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . visibility Ġ== ĠView . VISIBLE Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . meas ured Height Ġ!= Ġ 0 Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . meas ured Width Ġ!= Ġ 0 Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view . left Ġ!= Ġview . right ) Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view . top Ġ!= Ġview . bottom ) Ġ&& čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrect . contains ( touch Raw X . toInt (), Ġtouch Raw Y . toInt ())) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( child At Ġis ĠRecyclerView ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġcheck ( child At ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch View Ġ= Ġchild At čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( child At Ġis ĠViewGroup Ġ&& Ġchild At . child Count Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult View Ġ= Ġchild At . find RecyclerView ( target View , Ġtouch Raw X , Ġtouch Raw Y , Ġoffset Top ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result View Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch View Ġ= Ġresult View čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġtouch View č Ċ } čĊč Ċ /** å°Ĩ åŃĲ View çļĦ æķ°éĩı , Ġ éĩį ç½® åĪ° æĮĩå®ļçļĦ æķ°éĩı */ č Ċ public Ġfun ĠViewGroup . reset Child Count ( new Size : ĠInt , Ġon Add View : Ġ() Ġ-> ĠView ) Ġ{ čĊĠĠĠ Ġval Ġold Size Ġ= Ġchild Count čĊĠĠĠ Ġval Ġcount Ġ= Ġnew Size Ġ- Ġold Size čĊĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// éľĢè¦ģ è¡¥ åħħ åŃĲ View čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( on Add View . invoke ()) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} Ġelse Ġif Ġ( count Ġ< Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// éľĢè¦ģ ç§»éĻ¤ åŃĲ View čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount . abs ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove View At ( old Size Ġ- Ġ 1 Ġ- Ġi ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊč Ċ public Ġfun Ġ< T > ĠViewGroup . addView ( size : ĠInt , Ġdatas : ĠList < T >, Ġon Add View Callback : ĠOn Add View Callback < T >) Ġ{ čĊĠĠĠ Ġthis . reset Child Count ( size ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġlayout Id Ġ= Ġon Add View Callback . get Layout Id () čĊĠĠĠĠĠĠĠ Ġval Ġchild View Ġ= Ġif Ġ( layout Id Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( layout Id , Ġthis , Ġfalse ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġon Add View Callback . getView () !! čĊčĊĠĠĠĠĠĠĠ Ġon Add View Callback . onCreate View ( child View ) čĊčĊĠĠĠĠĠĠĠ Ġchild View čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ čĊĠĠĠĠĠĠĠ Ġon Add View Callback . on Init View ( getChild At ( i ), Ġif Ġ( i Ġ< Ġdatas . size ) Ġdatas [ i ] Ġelse Ġnull , Ġi ) čĊĠĠĠ Ġ} č Ċ } čĊčĊč Ċ /** åĬ¨æĢģ æ·»åĬł View , Ġ å¹¶ åĪĿå§ĭåĮĸ Ġ( åģļ äºĨ æĢ§èĥ½ ä¼ĺåĮĸ ) */ č Ċ public Ġfun Ġ< T > ĠViewGroup . addView ( datas : ĠList < T >, Ġon Add View Callback : ĠOn Add View Callback < T >) Ġ{ čĊĠĠĠ Ġadd View ( datas . size , Ġdatas , Ġon Add View Callback ) č Ċ } čĊč Ċ /** æŀļ ä¸¾ æīĢæľī child Ġview */ č Ċ public Ġfun ĠViewGroup . child s ( map : Ġ( Int , ĠView ) Ġ-> ĠUnit ) Ġ{ čĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġchild At Ġ= Ġget Child At ( i ) čĊĠĠĠĠĠĠĠ Ġmap . invoke ( i , Ġchild At ) čĊĠĠĠ Ġ} č Ċ } čĊč Ċ public Ġfun ĠViewGroup . show (@ Layout Res Ġlayout Id : ĠInt ): ĠView Ġ{ čĊĠĠĠ Ġreturn Ġshow ( layout Id , Ġnull , Ġnull ) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . show 2 (@ Layout Res Ġlayout Id : ĠInt ): ĠView Ġ{ čĊĠĠĠ Ġreturn Ġshow ( layout Id , ĠI View Animation Type . TRANSL ATE _ HORIZONTAL ) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . show (@ Layout Res Ġlayout Id : ĠInt , Ġanim Type : ĠI View Animation Type ): ĠView Ġ{ čĊĠĠĠ Ġvar Ġenter Animation : ĠAnimation ? Ġ= Ġnull čĊĠĠĠ Ġvar Ġother Exit Animation : ĠAnimation ? Ġ= Ġnull čĊčĊĠĠĠ Ġwhen Ġ( anim Type ) Ġ{ čĊĠĠĠĠĠĠĠ ĠI View Animation Type . NONE Ġ-> Ġnull čĊĠĠĠĠĠĠĠ ĠI View Animation Type . ALPHA Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Animation Ġ= ĠAnim Util . create Alpha Enter Anim ( 0 . 8 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Exit Animation Ġ= ĠAnim Util . create Alpha Exit Anim ( 0 . 8 f ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠI View Animation Type . TRANSL ATE _ VERTICAL Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Animation Ġ= ĠAnim Util . translate Start Animation () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Exit Animation Ġ= ĠAnim Util . create Alpha Exit Anim ( 0 . 8 f ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX , čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ END , čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX _ OVER SHO OT , čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ END _ OVER SHO OT , čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ TO _ MAX _ END _ OVER SHO OT Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠAnim Util . scale Max Alpha Start Animation ( 0 . 7 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anim Type Ġ== ĠI View Animation Type . SCALE _ TO _ MAX _ OVER SHO OT Ġ|| čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim Type Ġ== ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ END _ OVER SHO OT Ġ|| čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim Type Ġ== ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ TO _ MAX _ END _ OVER SHO OT ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . interpol ator Ġ= ĠOver shoot Interpolator () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Animation Ġ= Ġanimation čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Exit Animation Ġ= ĠAnim Util . create Other Exit No Anim () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ// é»ĺè®¤ ĠI View Animation Type . TRANSL ATE _ HORIZONTAL čĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Animation Ġ= ĠAnim Util . translate X Start Animation () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Exit Animation Ġ= ĠAnim Util . translate X Other Finish Animation () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġreturn Ġshow ( layout Id , Ġenter Animation , Ġother Exit Animation ) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . show (@ Layout Res Ġlayout Id : ĠInt , Ġenter Animation : ĠAnimation ?, Ġother Exit Animation : ĠAnimation ?): ĠView Ġ{ čĊĠĠĠ Ġval Ġview With Tag Ġ= Ġfind View With Tag < View >( layout Id ) čĊĠĠĠ Ġif Ġ( view With Tag Ġ== Ġnull ) Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġ// ä¹ĭåīį çļĦ view čĊĠĠĠĠĠĠĠ Ġval Ġpre View Ġ= Ġif Ġ( child Count Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( child Count Ġ- Ġ 1 ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( layout Id , Ġthis ) čĊĠĠĠĠĠĠĠ Ġval Ġnew View Ġ= Ġget Child At ( child Count Ġ- Ġ 1 ) čĊĠĠĠĠĠĠĠ Ġnew View . tag Ġ= Ġlayout Id čĊčĊĠĠĠĠĠĠĠ Ġnew View ?. let Ġ{ Ġview Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Animation ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . start Animation ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġpre View ?. let Ġ{ Ġview Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Exit Animation ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . start Animation ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġnew View čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġview With Tag č Ċ } čĊč Ċ public Ġfun ĠViewGroup . hide (@ Layout Res Ġlayout Id : ĠInt ): ĠView ? Ġ{ čĊĠĠĠ Ġreturn Ġhide ( layout Id , Ġnull , Ġnull ) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . hide 2 (@ Layout Res Ġlayout Id : ĠInt ): ĠView ? Ġ{ čĊĠĠĠ Ġreturn Ġhide ( layout Id , ĠI View Animation Type . TRANSL ATE _ HORIZONTAL ) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . hide (@ Layout Res Ġlayout Id : ĠInt , Ġanim Type : ĠI View Animation Type ): ĠView ? Ġ{ čĊĠĠĠ Ġvar Ġexit Animation : ĠAnimation ? Ġ= Ġnull čĊĠĠĠ Ġvar Ġother Enter Animation : ĠAnimation ? Ġ= Ġnull čĊčĊĠĠĠ Ġwhen Ġ( anim Type ) Ġ{ čĊĠĠĠĠĠĠĠ ĠI View Animation Type . NONE Ġ-> Ġnull čĊĠĠĠĠĠĠĠ ĠI View Animation Type . ALPHA Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Animation Ġ= ĠAnim Util . create Alpha Exit Anim ( 0 . 2 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Enter Animation Ġ= ĠAnim Util . create Alpha Enter Anim ( 0 . 8 f ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠI View Animation Type . TRANSL ATE _ VERTICAL Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Animation Ġ= ĠAnim Util . translate Finish Animation () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Enter Animation Ġ= ĠAnim Util . create Alpha Enter Anim ( 0 . 8 f ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ END , čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ END _ OVER SHO OT Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠAnim Util . scale Max Alpha Finish Animation ( 0 . 7 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anim Type Ġ== ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ END _ OVER SHO OT ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . interpol ator Ġ= ĠOver shoot Interpolator () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Animation Ġ= Ġanimation čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Enter Animation Ġ= ĠAnim Util . create Other Enter No Anim () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠI View Animation Type . SCALE _ TO _ MAX _ AND _ TO _ MAX _ END _ OVER SHO OT Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation 2 Ġ= ĠAnim Util . scale Max Alpha Finish Animation ( 1 . 2 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation 2 . interpol ator Ġ= ĠAnt icip ate Interpolator () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Animation Ġ= Ġanimation 2 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Enter Animation Ġ= ĠAnim Util . create Other Enter No Anim () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ// I View Animation Type . SCALE _ TO _ MAX , čĊĠĠĠ Ġ// I View Animation Type . SCALE _ TO _ MAX _ OVER SHO OT , čĊĠĠĠ Ġ// I View Animation Type . TRANSL ATE _ HORIZONTAL Ġ-> čĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Animation Ġ= ĠAnim Util . translate X Finish Animation () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Enter Animation Ġ= ĠAnim Util . translate X Other Start Animation () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġreturn Ġhide ( layout Id , Ġexit Animation , Ġother Enter Animation ) č Ċ } čĊč Ċ public Ġfun ĠViewGroup . hide (@ Layout Res Ġlayout Id : ĠInt , Ġexit Animation : ĠAnimation ?, Ġother Enter Animation : ĠAnimation ?): ĠView ? Ġ{ čĊĠĠĠ Ġval Ġview With Tag Ġ= Ġfind View With Tag < View >( layout Id ) čĊĠĠĠ Ġif Ġ( view With Tag Ġ== Ġnull Ġ|| Ġview With Tag . parent Ġ== Ġnull ) Ġ{ čĊĠĠĠ Ġ} Ġelse Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġ// ä¹ĭåīį çļĦ view čĊĠĠĠĠĠĠĠ Ġval Ġpre View Ġ= Ġif Ġ( child Count Ġ> Ġ 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( child Count Ġ- Ġ 2 ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġview With Tag . parent čĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠViewGroup ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġview With Tag . let Ġ{ Ġview Ġ-> čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Animation ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Animation Listener ( object Ġ: ĠAnimation . Animation Listener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAnimation ?) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAnimation ?) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAnimation ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . remove View ( view With Tag ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . start Animation ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exit Animation Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . remove View ( view With Tag ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre View ?. let Ġ{ Ġview Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Enter Animation ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . start Animation ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġview With Tag č Ċ } čĊč Ċ abstract Ġclass ĠOn Add View Callback < T > Ġ{ čĊĠĠĠ Ġopen Ġfun Ġget Layout Id (): ĠInt Ġ= Ġ- 1 čĊčĊĠĠĠ Ġopen Ġfun Ġget View (): ĠView ? Ġ= Ġnull čĊčĊĠĠĠ Ġ/** å½ĵ é¦ĸ æ¬¡ åĪĽå»º View æĹ¶ , Ġ åĽŀè°ĥ */ čĊĠĠĠ Ġopen Ġfun ĠonCreate View ( child : ĠView ) Ġ{ čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġopen Ġfun Ġon Init View ( view : ĠView , Ġdata : ĠT ?, Ġindex : ĠInt ) Ġ{ čĊčĊĠĠĠ Ġ} č Ċ }