package Ġcom . net ease . biz _ live . yun xin . live . float play Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcom . net ease . biz _ live . R Ċ import Ġcom . net ease . biz _ live . yun xin . live . utils . Click Utils . is Fast Click Ċ Ċ /** Ċ Ġ* Ġæ Ĥ¬ æµ ® çªĹ ç»Ħä»¶ Ċ Ġ*/ Ċ class ĠFloat View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG =" Float View " ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç³»ç»Ł çĬ¶æĢģ æłı çļĦ é«ĺåº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm StatusBar Height Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī ä¸ĭ äºĭä»¶ è·Ŀç¦» å±ı å¹ķ å·¦ è¾¹ çķĮ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm X Down In Screen Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĮī ä¸ĭ äºĭä»¶ è·Ŀç¦» å±ı å¹ķ ä¸Ĭ è¾¹ çķĮ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Y Down In Screen Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ » ĳ åĬ¨ äºĭä»¶ è·Ŀç¦» å±ı å¹ķ å·¦ è¾¹ çķĮ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm X In Screen Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ » ĳ åĬ¨ äºĭä»¶ è·Ŀç¦» å±ı å¹ķ ä¸Ĭ è¾¹ çķĮ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Y In Screen Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ » ĳ åĬ¨ äºĭä»¶ è·Ŀç¦» èĩª èº« å·¦ è¾¹ çķĮ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm X In View Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ » ĳ åĬ¨ äºĭä»¶ è·Ŀç¦» èĩª èº« ä¸Ĭ è¾¹ çķĮ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Y In View Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm WindowManager : ĠWindow Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Window Params : ĠWindow Manager . LayoutParams ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Window () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġm WindowManager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġm Window Params Ġ= ĠWindow Manager . LayoutParams () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Window Params !!. type Ġ= ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Window Params !!. type Ġ= ĠWindow Manager . LayoutParams . TYPE _ PHONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Window Params !!. flags Ġ= ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE ĊĠĠĠĠĠĠĠ Ġm Window Params !!. window Animations Ġ= ĠR . style . Float Window Animation ĊĠĠĠĠĠĠĠ Ġm Window Params !!. format Ġ= ĠPixel Format . TRANSL UC ENT ĊĠĠĠĠĠĠĠ Ġm Window Params !!. gravity Ġ= ĠGr avity . LEFT Ġor ĠGr avity . TOP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠaddTo Window (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m WindowManager Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WindowManager !!. addView ( this , Ġm Window Params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WindowManager !!. addView ( this , Ġm Window Params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloat Play Log Util . log ( TAG ," addTo Window Ġe :$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove From Window (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m WindowManager Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Attached To Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WindowManager !!. remove View Immediate ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WindowManager !!. remove View Immediate ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloat Play Log Util . log ( TAG ," remove From Window Ġe :$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm X In View Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Y In View Ġ= Ġevent . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm X Down In Screen Ġ= Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Down In Screen Ġ= Ġevent . raw Y Ġ- Ġstatus Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm X In Screen Ġ= Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Y In Screen Ġ= Ġevent . raw Y Ġ- Ġstatus Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm X In Screen Ġ= Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Y In Screen Ġ= Ġevent . raw Y Ġ- Ġstatus Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( m X In Screen Ġ- Ġm X In View ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ( m Y In Screen Ġ- Ġm Y In View ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Window Params !!. x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Window Params !!. y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WindowManager !!. update View Layout ( this , Ġm Window Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġif Ġ( m X Down In Screen Ġ== Ġm X In Screen Ġ&& Ġm Y Down In Screen Ġ== Ġm Y In Screen ) Ġ{ Ġ// æīĭ æĮĩ æ²¡æľī æ»ĳ åĬ¨ è§Ĩ ä¸º çĤ¹åĩ» ï¼Į åĽŀ åĪ° çªĹåı£ æ¨¡å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Fast Click () Ġ&& Ġon Float View ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloat Play Log Util . log ( TAG ," click Ġfloat Ġview ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Float View ClickListener !!. onClick () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstatus Bar Height : ĠInt ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m StatusBar Height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠClass . forName (" com . android . internal . R \$ dim en ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġc . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġc . getField (" status _ bar _ height ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġfield [ o ] Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm StatusBar Height Ġ= Ġresources . get Dimension Pixel Size ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm StatusBar Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Window Params !!. width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġm Window Params !!. height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġm WindowManager !!. update View Layout ( this , Ġm Window Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( width : ĠInt , Ġheight : ĠInt , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Window Params !!. width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġm Window Params !!. height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġm Window Params !!. x Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġm Window Params !!. y Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġm WindowManager !!. update View Layout ( this , Ġm Window Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġon Float View ClickListener : ĠOn Float View ClickListener ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġset On Float View ClickListener ( on Float View ClickListener : ĠOn Float View ClickListener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Float View ClickListener Ġ= Ġon Float View ClickListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Float View ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick () ĊĠĠĠ Ġ} Ċ }