Spanish Traducción Tutorial Multitouch

Jomagom

Member
Licensed User
Longtime User
Traducido del Foro de Ingles
Posteado por Erel

Uso de la biblioteca Agraham los gestos que pueden controlar los eventos multitáctiles.
Este es un ejemplo de una aplicación de dibujo simple que soporta multitouch:
multitouch_1.png

Como se puede ver en la imagen anterior, cada dedo dibuja con un color diferente y también muestra el identificador y la posición actual de cada contacto.

Con el fin de apoyar a un objeto de gestos multitouch se utiliza para añadir un oyente a un punto de vista específico.
El oyente es el responsable de provocar un evento con cada movimiento o cambio en el estado multitouch.

Dentro de este evento que estamos manejando el gesto. Cada contacto recibe una Identificación del puntero durante un gesto. La Identificación del puntero se asigna cuando un dedo toca la pantalla y se libera cuando el mismo dedo sale de la pantalla.

Creo que es útil para mantener un mapa con los identificadores de puntero como las claves y los datos de los extras que desee asignar a cada contacto como valores.
En nuestro ejemplo, almacenar el color y la posición anterior como el valor.

Mantener el mapa se hace con el código siguiente:
B4X:
Sub GesturesTouch(View As Object, PointerID As Int, Action As Int, X As Float, Y As Float) As Boolean
    Dim p As Point
    Select Action
        Case g.ACTION_DOWN, g.ACTION_POINTER_DOWN
            'New Point is assigned to the new touch
            p.Id = PointerID
            p.Color = Colors.RGB(Rnd(0, 255), Rnd(0, 255), Rnd(0, 255))
            TouchMap.Put(PointerID, p)
        Case g.ACTION_POINTER_UP
            TouchMap.Remove(PointerId)
        Case g.ACTION_UP
            TouchMap.Clear
    End Select
  ...
El tipo de punto se declara en Sub Globales:
B4X:
Type Point(Id As Int, prevX As Int, prevY As Int, Color As Int)
El resultado es que TouchMap contiene información acerca de los toques activos.
Ahora todo lo que queda por hacer es repetir los valores TouchMap y conectar las coordenadas anteriores con los nuevos y actualizar las coordenadas anterior.
Las nuevas coordenadas se obtienen llamando g.GetX / Y con el identificador del puntero.
B4X:
Dim px, py As Int
For i = 0 To TouchMap.Size - 1
    p = TouchMap.GetValueAt(i)
    px = g.GetX(p.id) 'Get the current coordinates of this touch
    py = g.GetY(p.id)
    Dim s As String
    s = p.Id & ": " & px & " x " & py
    Canvas.DrawText(s, 10dip, 20dip + i * RowHeight, Typeface.DEFAULT, TextSize, p.Color, "LEFT")
    If p.prevX > 0 AND p.prevY > 0 Then
        Canvas.DrawLine(p.prevX, p.prevY, px, py, p.Color, 5dip)
    End If
    p.prevX = px
    p.prevY = py
Next
bgd.Invalidate
p.prevX y p.prevY será igual a 0 cuando el contacto se inicia. En este caso no sacamos nada.

http://www.basic4ppc.com/forum/attachments/basic4android-getting-started-tutorials/8127d1311600714-android-multitouch-tutorial-multitouchexample.zip

Un Saludo
 
Top