Spanish Panel Touch

ebqlabs

Active Member
Licensed User
Hola, como saber el tiempo en el que se esta presionando el Panel Touch, esto es para decir, presiono 10 segundos sin soltar el dedo del Panel Touch, realiza una acción.-
 

JordiCP

Expert
Licensed User
Longtime User
Cada vez que se llama al evento panel_touch, el parámetro "Action" the dice si se empieza a presionar (ACTION_DOWN), se mueve (ACTION_MOVE) , o se libera (ACTION_UP). Sólo necesitamos el DOWN para activar un Timer y el UP para desactivarlo

Si por ejemplo quieres realizar una accion despues de 10 segundos, Algo así (no probado)
B4X:
Sub Process_Globals
  Dim Timer1 as Timer
End Sub


Sub Activity_Create
  '...
  Panel1.Initialize("Panel1")
  Timer1.initialize("Timer1",10000)
  Timer1.Enabled=False
  '...
End Sub

Sub Timer1_Tick
    Timer1.Enabled=False
    CallSubDelayed(Me,"LaRutinaQueSea")
End sub

Sub Activity_Pause
  Timer1.Enabled=False
End if


Sub Panel1_Touch (Action As Int, X As Float, Y As Float)
    If Action=Activity.ACTION_DOWN Then
      Timer1.Enabled=False
         Timer1.interval=10000  '10 segundos
      Timer1.Enabled=True
   End If
   If Action=Activity.ACTION_UP Then
     Timer1.enabled=False
   End if
End Sub
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Sólo un pequeño apunte pero importante, que seguramente se le habrá pasado a JordiCP al escribirte el código, he tenido problemas de que se crean nuevas instancias del timer al no poner la inicialización del timer con la condición FirsTime (del Create):

B4X:
If FirstTime Then
 Timer1.initialize("Timer1",10000)
 Timer1.Enabled=False
End if

Erel recomienda como bien ha puesto JordiCp la declaración en Sub Process_Globals (nunca en Sub Globals aunque tambien funciona pero crea nuevas instancias) y la inicialización con la condicion de If FirstTime Then , no se si esto está corregido, pero antes pasaba y a mi me dió bastantes quebraderos de cabeza hasta descubrirlo.


Saludos
 

ebqlabs

Active Member
Licensed User
Muchas Gracias.!!
Excelente me sirvió un monto. Tengo una duda, yo en la rutina
"LaRutinaQueSea" estoy insertando unas imágenes pequeñas al cabo de 5 segundos. ¿Como puedo Limpiar el Panel Touch, una vez insertadas las imágenes?, osea con un botón Limpiar.
Me Explico!!

Gracias.-
Saludos.-
 
Last edited:

Descartex

Well-Known Member
Licensed User
Longtime User
Muy buenas.
Si lo que quieres es limpiar completamente el panel, simplemente haz
B4X:
TouchPanel.RemoveAllViews
Un saludo.
 

ebqlabs

Active Member
Licensed User
Oca. gracias.
Me sirve dentro de lo normal, pero lo que yo necesito realmente, te explico mira yo dentro de un panel tengo una ImageView que me ocupa el ancho y el largo del panel, yo presiono sobre el panel touch ej. 2 segundos e inserto una ImageView2 pequeña. Al hacer eso que me dices borro todo lo que este sobre el panel e incluso la primera imagen que esta insertar osea la ImageView y lo que yo necesito es borrar las demás y no esa. estuve intentando hacer esto

B4X:
For b = 1 To Panel5.NumberOfViews -1
   
    Panel5.GetView(b).RemoveView
       
Next

Pero inserto un ImageView2 y no hay dramas lo borra sin problema, el problema esta cuando se insertan mas de 2 ImageView2 arroja error, me dice que:

Object should first be initialized(View)

Favor Ayuda Gracias.-
 

Descartex

Well-Known Member
Licensed User
Longtime User
Puedes ponerles un distintivo en la propiedad Tag a los que crees tu. Despues recorres recursivamente todos, y los que tengan el Tag indicado, borrarlos.
Algo asi:
B4X:
For b = 0 To Panel5.NumberOfViews -1
  
    If Panel5.GetView(b).Tag="MiMarca" Then
         Panel5.GetView(b).RemoveView
    End If
Next
Un saludo.
 

ebqlabs

Active Member
Licensed User
Muchas Gracias.-
El error que me daba era por que yo le tenia la b en del ciclo FOR Panel5.GetView(b).RemoveView, por lo que entendí el GetView() es la cantidad de objeto, osea cada vez que pasaba aumentaba la b y eso hacia que no encontrara el objecto y por ende no lo eliminara y apareciera el error Object should first be initialized(View)

Lo que hice es dejarlo asi
Panel5.GetView(1).RemoveView
Me funciona bien, pero me remueve del primero al ultimo, y yo lo necesito al revés, que remueva el ultimo al Primero.

Gracias.-
 

Descartex

Well-Known Member
Licensed User
Longtime User

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Hazlo asi:
B4X:
For b = Panel5.NumberOfViews -1 to 0 Step -1
 If Panel5.GetView(b).Tag="MiMarca"Then  Panel5.GetView(b).RemoveView
Next

Saludos
 
Top