package Ġkr . dev flow . ark 2 d . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ Ċ class ĠOverlay Container Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull , Ġdef : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattribute Set , Ġdef ), ĠView . On Touch Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdown Raw X : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdown Raw Y : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlast X : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlast Y : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcallbacks : ĠCallback s ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġgesture Detector : ĠGest ure Detector ĊĠĠĠ Ġprivate Ġvar Ġis Res izing Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġresize Direction Ġ= Ġ 0 Ġ// Ġ 0 - left Ġ 1 - right ĊĠĠĠ Ġvar Ġresize Threshold Ġ= Ġ 4 5 ĊĠĠĠ Ġvar Ġis Resizable Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset On Touch Listener ( this ) ĊĠĠĠĠĠĠĠ Ġgesture Detector Ġ= ĠGest ure Detector ( context , ĠGest ure Listener ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Callbacks ( callbacks : ĠCallback s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . callbacks Ġ= Ġcallbacks ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Resize Control Area ( x : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġresize Ġcontrol Ġareas Ġ= Ġleft - bottom , Ġright - bottom ... Ġand ... Ġnop . ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġlayout Params . width ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġlayout Params . height ĊĊĠĠĠĠĠĠĠ Ġ// first Ġcheck Ġy Ġat Ġbottom ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġin Ġ( h Ġ- Ġresize Threshold ) Ġuntil Ġh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 Ġuntil Ġresize Threshold Ġ-> Ġ{ Ġ// Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Direction Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue Ġ// Ġleft Ġdirection Ġneed Ġto Ġmove Ġx Ġcoordinate Ġwith Ġ- offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ( w Ġ- Ġresize Threshold ) Ġuntil Ġw Ġ-> Ġ{ Ġ// Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Direction Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch ( view : ĠView , Ġmotion Event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġgesture Detector . on Touch Event ( motion Event ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġmotion Event . action ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġmotion Event . raw X . toInt () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġmotion Event . raw Y . toInt () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Raw X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown Raw Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Res izing Ġ= Ġis Resizable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġis Resize Control Area ( motion Event . x . toInt (), Ġmotion Event . y . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Res izing ) Ġcallbacks ?. on Resize Start () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnx Ġ= Ġ( x Ġ- Ġlast X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġny Ġ= Ġ( y Ġ- Ġlast Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġy ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Res izing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Resize ( nx , Ġny , Ġresize Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Drag ( nx , Ġny ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Res izing ) Ġcallbacks ?. on Resize End () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Res izing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Drag End ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( motion Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠGest ure Listener Ġ: ĠGest ure Detector . Simple On Gesture Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Single Tap Confirmed ( e : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Single Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Press ( e : ĠMotion Event ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Long Press () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Double Tap ( e : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on DoubleClick () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCallback s Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Resize Start () ĊĠĠĠĠĠĠĠ Ġfun Ġon Resize End () ĊĠĠĠĠĠĠĠ Ġfun Ġon Resize ( dx : ĠInt , Ġdy : ĠInt , Ġdirection : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Drag ( dx : ĠInt , Ġdy : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Drag End ( dx : ĠInt , Ġdy : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Drag Start ( dx : ĠInt , Ġdy : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon DoubleClick () ĊĠĠĠĠĠĠĠ Ġfun Ġon Single Click () ĊĠĠĠĠĠĠĠ Ġfun Ġon Long Press () ĊĠĠĠ Ġ} Ċ }