package Ġcom . storm kid . k ui _ base . badge Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġcom . storm kid . k ui _ base . Utils Ċ Ċ /** Ċ ĠM VP Ġæ¨¡ å¼ı å¤ĦçĲĨ åĽŀè°ĥ Ċ @ author Ġke _ li Ċ @ date Ġ 2 0 1 8 / 1 0 / 2 9 Ċ Ġ*/ Ċ class ĠBadge Dragging Helper ( private Ġval Ġview : ĠView , Ġprivate Ġval Ġdis s miss Callback : ĠDis miss Callback ): ĠView . On Touch Listener Ġ{ ĊĠĠĠ Ġ// Ġèİ·åıĸ window Manager Ġ éģ ® ç½ © éķ¿ æĮī ç§»åĬ¨ ĊĠĠĠ Ġprivate Ġval Ġwindow Manager : ĠWindow Manager Ġ= Ġview . context . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠ Ġ// Ġè®¾ç½® éĢı æĺİ manager ĊĠĠĠ Ġprivate Ġval Ġparams Ġ= ĠWindow Manager . LayoutParams (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġformat Ġ= ĠPixel Format . TRANSP ARENT ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĠWindow Manager . LayoutParams . FLAG _ DR AWS _ SYSTEM _ BAR _ BACK GRO UN DS ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġbadge Change Helper Ġ= ĠBadge Drag View ( view . context ) ĊĠĠĠ Ġprivate Ġvar Ġmy Build : Badge Drag View . Builder ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġview . tag Ġ?: 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( color != 0 ) Ġbadge Change Helper . set Paint Color ( color Ġas ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView ?, Ġevent : ĠMotion Event ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen ( event ?. action ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĮī ä¸ĭ æĹ¶ éĢļè¿ĩ window Manager åĲ¯åĬ¨ æ»ĳ åĬ¨ æĵįä½ľ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . addView ( badge Change Helper , params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġint ArrayOf ( 0 , 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ?. getLocation On Screen ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æŀĦå»º bitmap èĻļæĭŁ åĽ¾ å±Ĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Map Ġ= ĠUtils . get Bit Map ( v !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ view ä¸Ńå¿ĥ çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Change Helper . init Point ( location [ 0 ]. plus ( v . width / 2 f ), location [ 1 ]. plus ( v . height / 2 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Change Helper . set Bitmap ( bit Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Build Ġ= Ġ Ġbadge Change Helper . Builder ( object Ġ: On Touch Listener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġre Back () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( badge Change Helper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdismiss ( point F : ĠPoint F ) Ġ{ Ġ// Ġ åıĸæ¶Ī åĲİ å¤ĦçĲĨ åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . remove View ( badge Change Helper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis s miss Callback . dis missed ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . visibility Ġ- ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ » ĳ åĬ¨ å¼Ģå§ĭ è®¡ç®Ĺ è·Ŀç¦» ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Change Helper . updated Point ( event . raw X , event . raw Y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP -> Ġmy Build ?. insert Animator () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdrag ing ( view : ĠView , dismiss Callback : ĠDis miss Callback ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOn Touch Listener ( Badge Dragging Helper ( view , dismiss Callback )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }