Sub Class_Globals
Private innerView As View
Private panel1 As Panel
Private downx, downy As Int
Private ACTION_DOWN, ACTION_MOVE As Int
Public GridX = 10dip, GridY = 10dip As Int
Private moved As Boolean
Private mCallback As Object
Private mEventName As String
End Sub
public Sub Initialize(Activity As Activity, v As View, Callback As Object, EventName As String)
innerView = v
panel1.Initialize("")
panel1.Color = Colors.Transparent
Activity.AddView(panel1, v.Left, v.Top, v.Width, v.Height)
ACTION_DOWN = Activity.ACTION_DOWN
ACTION_MOVE = Activity.ACTION_MOVE
Dim r As Reflector
r.Target = panel1
r.SetOnTouchListener("Panel1_Touch")
mCallback = Callback
mEventName = EventName
End Sub
Private Sub Panel1_Touch (o As Object, ACTION As Int, x As Float, y As Float, motion As Object) As Boolean
If ACTION = ACTION_DOWN Then
downx = x
downy = y
moved = False
Else if ACTION = ACTION_MOVE Then
Dim l As Int = innerView.Left + x - downx
Dim t As Int = innerView.Top + y - downy
Dim deltaX = (l Mod GridX), deltaY = (t Mod GridY) As Int
innerView.Left = l - deltaX
innerView.Top = t - deltaY
If deltaX <> 0 Or deltaY <> 0 Then moved = True
panel1.Left = innerView.Left
panel1.Top = innerView.Top
Else
If moved = False Then
CallSub(mCallback, mEventName & "_click")
End If
End If
Return True
End Sub