German Pfeil zwischen zwei Buttons zeichnen

StephanP82

Member
Licensed User
Longtime User
Hallo zusammen,

Ich habe ein Panel mit insgesamt 14 Buttons darauf, jeweils 2 in einer Reihe. Wenn ich den Finger auf einen Button setze und ihn dann ziehe, soll ein Pfeil gezeichnet werden, der dem Finger folgt und je nach dem wo ich ihn hin ziehe, die Richtung und Länge ändern. Dabei soll auch erkannt werden ob er dabei einen anderen Button streift. Wenn ich dann los lasse, soll der Pfeil verschwinden und ein Event ausgelöst werden, dem beide Buttons bekannt sind, also der Start-Button und der über dem losgelassen wurde.

Soweit der Plan. Bei meinen Recherchen dazu habe ich dieses sehr interessante Projekt gefunden, jedoch hilft mir das auch nur begrenzt, weil ich kein festes Ziel habe auf das der Pfeil zeigen könnte. Auch scheinen meine Buttons sich das Vorrecht zu nehmen auf die Berührung zu reagieren, auch wenn ein transparentes Panel darüber liegt, welches ein Touch-Event hat. Das wird nur nie ausgelöst.

Hat jemand einen Denkanstoß für mich? Danke.

Hier der bisherige Code:
B4X:
Public Sub Initialize
'    B4XPages.GetManager.LogEvents = True
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("Main")
    Canvas.Initialize(PNL_Content)
    B4XPages.SetTitle(Me, Application.LabelName)
    Wait For (SetMenuBar) Complete(Result As Boolean)
     
    Dim r As Reflector
    r.Target = PNL_TransPanel
    PNL_TransPanel.BringToFront
    r.SetOnTouchListener("TransPanel_Touch")
End Sub

Private Sub TransPanel_Touch (o As Object, ACTION As Int, x As Float, y As Float, motion As Object) As Boolean
    If ACTION = PNL_Content.TOUCH_ACTION_MOVE_NOTOUCH Then Return False
   
    TouchLocation(0) = x
    TouchLocation(1) = y
   
    Dim FoundButton As Button
    For Each V As View In PNL_Content.GetAllViewsRecursive
        For i = V.Left To V.Left + V.Width
            If i = x Then
                For u = V.Top To V.Top + V.Height
                    If u = y Then
                        FoundButton = V
                        Exit
                    End If
                Next
            End If
        Next
    Next
   
    If FoundButton.IsInitialized Then
        ShowArrow(FoundButton)
    End If
   
    Return True
End Sub

Sub ShowArrow(Button As Button)
    Dim x As Int = Button.Left + Button.Width / 2
    Dim y As Int = Button.Top + Button.Height / 2

    Canvas.Initialize(PNL_Content)
    Canvas.DrawLine(x, y, TouchLocation(0), TouchLocation(1), Colors.Black, 1dip)
End Sub

Edit: Ich weiß, die doppelte Schleife um den Button zu ermitteln, ist so richtig schlecht, das wird noch geändert :)
 
Last edited:
Top