package Ġcom . c ym jo e . test f ios dialog fragment demo . ios dialog fragment Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view .* Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ Ċ import Ġcom . c ym jo e . test f ios dialog fragment demo . MainActivity Ċ import Ġcom . c ym jo e . test f ios dialog fragment demo . R Ċ import Ġcom . c ym jo e . test f ios dialog fragment demo . Test Adapter ĊĊ Ċ class ĠI os Dialog View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ), ĠOn Top Scroll Y Listener Ġ{ ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcan Touch Ġ= Ġtrue // æĺ¯åĲ¦ åı¯ä»¥ æĭ ĸ åĬ¨ ĊĠĠĠ Ġprivate Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġinflater : ĠView ĊĠĠĠ Ġlateinit Ġvar Ġrich : ĠWebView ĊĠĠĠ Ġlateinit Ġvar Ġrv : ĠCustom RecyclerView ĊĠĠĠ Ġlateinit Ġvar Ġscroll : ĠCustom ScrollView ĊĠĠĠ Ġlateinit Ġvar Ġimg Close : ĠImageView ĊĠĠĠ Ġlateinit Ġvar Ġll _ bg : ĠLinearLayout ĊĠĠĠ Ġval Ġduration Ġ= Ġ 3 0 0 L // åĬ¨çĶ» æĹ¶ éķ¿ ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . ios dialog _ fragment , Ġthis ) ĊĠĠĠĠĠĠĠ Ġll _ bg Ġ= Ġinflater . findViewById ( R . id . ll _ bg ) ĊĠĠĠĠĠĠĠ Ġrich Ġ= Ġinflater . findViewById ( R . id . rich ) ĊĠĠĠĠĠĠĠ Ġrv Ġ= Ġinflater . findViewById ( R . id . rv ) ĊĠĠĠĠĠĠĠ Ġscroll Ġ= Ġinflater . findViewById ( R . id . scroll ) ĊĠĠĠĠĠĠĠ Ġimg Close Ġ= Ġinflater . findViewById ( R . id . img _ close ) ĊĠĠĠĠĠĠĠ Ġll _ bg . setOnClickListener Ġ{ Ġ Ġ} ĊĠĠĠĠĠĠĠ Ġimg Close . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint ( up Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscroll . setOn Top Scroll Y Listener ( this ) ĊĠĠĠĠĠĠĠ Ġrv . setOn Top Scroll Y Listener ( this ) ĊĠĠĠĠĠĠĠ Ġthis @ I os Dialog View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠTest Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrv . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġrich . load Url (" https :// www . baidu . com /") ĊĠĠĠĠĠĠĠ Ġrich . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġup Y Ġ= Ġ 0 f // æīĭ æĮĩ æĬ ¬ èµ· æĹ¶çļĦ ä½į ç§» è·Ŀç¦» ï¼Ī Y ï¼ī ĊĠĠĠ Ġvar Ġdown Y Ġ= Ġ 0 f // æĮī ä¸ĭ åĿĲæłĩ ï¼Ī Y ï¼ī ĊĠĠĠ Ġvar Ġmove Y Ġ= Ġ 0 f // ä½į ç§» è·Ŀç¦» ï¼Ī Y ï¼ī ĊĠĠĠ Ġvar Ġno Top Move Ġ= Ġ 0 f // æľª æ»ĳ åĬ¨ åĪ° é¡¶ éĥ¨ çļĦ ç§»åĬ¨ è·Ŀç¦» ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( can Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ev . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Y Ġ= Ġev . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Top Ġ&& Ġis Rv Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Y Ġ= Ġev . raw Y Ġ- Ġdown Y Ġ- Ġno Top Move ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Scroll Y ( move Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move Y Ġ+ Ġup Y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ»ĳ åĬ¨ æĹ¶ å±ı èĶ ½ web View éķ¿ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrich . setOn Long ClickListener Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Top Move Ġ= Ġev . raw Y Ġ- Ġdown Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL , ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Top Move Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åıĸæ¶Ī å±ı èĶ ½ web View éķ¿ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrich . setOn Long ClickListener Ġ{ Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( up Y Ġ> Ġget Screen Height () Ġ* Ġ 0 . 5 5 f Ġ- Ġresources . get Dimension Pixel Offset ( R . dim en . dp _ 5 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhint ( up Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( up Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( ev ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Screen Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwm Ġ= Ġcontext . getSystem Service ( AppCompatActivity . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= ĠPoint () ĊĠĠĠĠĠĠĠ Ġwm . default Display . get Real Size ( point ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpoint . y ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġshow ( listener : ĠOn Update Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Update Listener Ġ= Ġlistener ĊĊĠĠĠĠĠĠĠ Ġshow ( get Screen Height (). toFloat ()) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow ( n : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( this , Ġ" translation Y ", Ġn , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġanim . duration Ġ= Ġduration ĊĠĠĠĠĠĠĠ Ġanim . start () ĊĠĠĠĠĠĠĠ Ġanim . add Update Listener Ġ{ Ġanimation Ġ-> ĠonUpdate Listener ?. on Update ( animation . animated Value Ġas ĠFloat Ġ/ Ġget Screen Height ()) Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhint ( n : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. window ?. add Flags ( WindowManager . LayoutParams . FLAG _ ALT _ FOCUS ABLE _ IM ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( this , Ġ" translation Y ", Ġn , Ġget Screen Height (). toFloat ()) ĊĠĠĠĠĠĠĠ Ġanim . duration Ġ= Ġduration ĊĠĠĠĠĠĠĠ Ġanim . start () ĊĠĠĠĠĠĠĠ Ġanim . add Update Listener Ġ{ Ġanimation Ġ-> ĠonUpdate Listener ?. on Update ( animation . animated Value Ġas ĠFloat Ġ/ Ġget Screen Height ()) Ġ} ĊĠĠĠĠĠĠĠ Ġanim . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ I os Dialog View . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar ĠonUpdate Listener : ĠOn Update Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinterface ĠOn Update Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonUpdate ( n : ĠFloat ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Scroll Y ( it : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ+ Ġup Y Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġit Ġ+ Ġup Y ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Listener ?. on Update ( y Ġ/ Ġget Screen Height ()) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æīĭ æĮĩ ä»İ ScrollView Ġ æĪĸèĢħ RecyclerView æĬ ¬ èµ· çĽĳåĲ¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġup Y Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ å½ĵåīį view ç§»åĬ¨ è·Ŀç¦» ĊĠĠĠĠĠĠĠ Ġif Ġ( up Y Ġ> Ġget Screen Height () Ġ* Ġ 0 . 5 5 f Ġ- Ġ Ġresources . get Dimension Pixel Offset ( R . dim en . dp _ 5 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint ( up Y ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( up Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġis Top Ġ= Ġtrue ĊĠĠĠ Ġvar Ġis Rv Top Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽĳåĲ¬ ScrollView æĺ¯åĲ¦ åĪ° é¡¶ éĥ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġis Top ( is Top : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is Top Ġ= Ġis Top ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽĳåĲ¬ RecyclerView æĺ¯åĲ¦ åĪ° é¡¶ éĥ¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġis Rv Top ( is Rv Top : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is Rv Top Ġ= Ġis Rv Top ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Activity ( main Activity : ĠMainActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . activity Ġ= Ġmain Activity ĊĠĠĠ Ġ} ĊĊ Ċ }