16. Timer (Temporizador). Pausa. Bajar Timer.zip Tutorial. Estudio del Timer. Pausa. Presentación Aunque ya lo vimos en el tutorial Tres_iguales, vamos a insistir en la herramienta Timer. El Timer es un temporizador. El código que tiene dentro de su Subrutina se repite cada cierto Interval de tiempo. Sub Timer1_Tick ' El código que ponemos aquí ' se repite continuamente cada Interval de tiempo. ' El Interval es una propiedad del Timer End If El Timer no es un control "físico" que aparezca en el Activity. Además lo debemos crear en el código, ya que no existe en el Designer. Primero entramos en el programa Basic4Android / Tools / Run AVD Manager Luego en el Android SDK Manager / Tools / Manage AVDs... Marcamos un AVD Name / y pulsamos Start y luego Launch para abrir un emulador
Creamos los controles
Bajar Timer.zip Insertamos mediante Designer / Add View SeekBar1 Max value = 1000 ' 1000 milisegundos son un segundo Label1 Label2 Guardamos el Designer: File / Save : Layout Conectamos el Designer al emulador. Tools / Connect
Una vez cargado el Designer en el emulador, podemos ubicar los controles donde queramos.
__________________________________
Código del programa Timer 'Activity module Sub Process_Globals ' Juan Antonio Villalpando '
[email protected] ' Crea el temporizador Dim Timer1 As Timer End Sub Sub Globals Dim tiempo As Int Dim cambia As Boolean cambia = True Dim SeekBar1 As SeekBar Dim Label1, Label2 As Label Timer1.Initialize("Timer1", 500) ' 1000 = 1 segundo Timer1.Enabled = True End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("Layout") End Sub Sub SeekBar1_ValueChanged (Value As Int, UserChanged As Boolean) tiempo=SeekBar1.Value Label1.text=tiempo Timer1.Interval=tiempo End Sub Sub Timer1_Tick ' Cada vez que pasan 100 milisegundos If cambia Then Label2.Color=Colors.Blue cambia = Not (cambia) Else Label2.Color=Colors.Red cambia = Not (cambia) End If End Sub
Comentario del programa. He creado una variable Boolean llamada cambia, esta variable solo tiene dos valores: True y False. Puedo cambiar de un valor a otro mediante: cambia = Not (cambia) De esta manera cambia vale lo contrario que su valor anterior. También he creado el Timer1 en la Sub Process Global y en la Global.He Inicializado su Interval y lo he activado mediante Enabled = True. Timer1.Enabled = False pararía el temporizador Al mover el Scroll (SeekBar1), cambia su Value. Su Value lo asigno atiempo. tiempo lo asigno al Interval del Timer. Y lo pongo en la etiquetaLabel1. Cada cierto Interval, el programa realiza al Subrutina Timer_Tick En esta Subrutina, se consulta el valor de cambia. Si cambia= True Entonces el Label2 se pone Azul. En caso contrario el Label2 se pone Rojo. Además en los dos casos pone el cambia a lo contrario que estaba mediante: cambia = Not (cambia) (Se podría haber puesto un solo cambia = Not (cambia) después del End If) If cambia Then Label2.Color=Colors.Blue Else Label2.Color=Colors.Red End If cambia = Not (cambia)
__________________________________ Otro código de intermitente. Otro ejemplo de intermitente. En este caso utilizo un Canvas, este puede contener elementos gráficos. Los controles están creados mediante el código, no tiene Layout.
Código del programa Timer ' Juan Antonio Villalpando '
[email protected] ' Intermitente. Sub Process_Globals End Sub Sub Globals Dim Panel1 As Panel Dim Canvas1 As Canvas Dim SeekBar1 As SeekBar Dim cambia As Boolean cambia=True Dim Timer1 As Timer End Sub Sub Activity_Create(FirstTime As Boolean) ' Crea un Panel Panel1.Initialize("Panel1")
Activity.AddView(Panel1, 0, 0, 100%x, 100%y) ' Crea un Canvas1 en el Panel Canvas1.Initialize(Panel1) Canvas1.DrawCircle(100, 100, 90, Colors.Blue, True, 3dip) ' Crea etiqueta de alcance SeekBar1.Initialize("SeekBar1") SeekBar1.Max=2000 Panel1.AddView(SeekBar1, 5, 350, 200, 50) ' Crea Timer Timer1.Initialize("Timer1", 1000) ' 1000 = 1 segundo Timer1.Enabled = True End Sub Sub Activity_Resume End Sub Sub SeekBar1_ValueChanged (Value As Int, UserChanged As Boolean) Timer1.Interval=Value End Sub Sub Timer1_Tick If cambia Then Canvas1.DrawCircle(100, 100, 90, Colors.Red, True, 3dip) Else Canvas1.DrawCircle(100, 100, 90, Colors.Blue, True, 3dip) End If cambia = Not (cambia) Canvas1.Initialize(Panel1) End Sub
__________________________________ Temporizador. Pausa. Sleep. Otra cosa distinta sería hacer una Pausa, es decir que el programa quedara pausado unos momentos, para ello se suele utilizar esta Subrutina... Sub Pausa(segundos As Long) Dim now As Long now = DateTime.Now Do Until (DateTime.Now > now + (segundos * 1000)) DoEvents Loop End Sub
Esta Subrutina suele ir al final del código. En cualquier parte del código podemos llamar a esta función de la manera... Pausa(3) ' Esto hará una pausa de 3 segundos.
La función Pausa, lo que hace es tomar el instante actual (Now) y estar haciendo un bucle hasta que se supere el tiempo del momento en que comenzó la función más el tiempo agregado a la función (segundos). now + segundos Se ha multiplicado por 1000, porque el Now devuelve el tiempo en milisegundos. El DoEvents, permite que se puedan realizar otros eventos (por ejemplo, pulsar una tecla...) mientras está en el bucle.
__________________________________