Foros del Web » Programando para Internet » Android »

Repintar la pantalla en un bucle

Estas en el tema de Repintar la pantalla en un bucle en el foro de Android en Foros del Web. Hola a todos, primero de todo gracias por leer esta duda, soy un principiante y seguro que hay una manera facil de hacer esto pero ...
  #1 (permalink)  
Antiguo 08/11/2014, 05:22
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Repintar la pantalla en un bucle

Hola a todos,

primero de todo gracias por leer esta duda, soy un principiante y seguro que hay una manera facil de hacer esto pero no la encuentro. Me explico:

Mi escenario son dos circulos rojos y lo que quiero es que se vayan coloreando de verde alternativamente.
Para esto habia pensado hacer un bucle for dentro del onCreate y dentro de eso for introducir ademas del codigo necesario para cambiar el color, el metodo invlidate() seguido de un sleep de 1 segundo, seria algo asi:

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.maingame);

RelativeLayout layout1 = (RelativeLayout) findViewById(R.id.layout1);
fondo = new Lienzo(this);
layout1.addView(fondo);

for (int i=0; i<5; i++){
//Mas código
fondo.invalidate();
//sleep de 1 segundo

}

}

El problema es que cuando la app esté en el onCreate, se ve negra y se espera 5 segundos por los 5 sleeps y al final pinta solo el ultimo caso.

Lo que yo busco es que vaya pintado un caso tras otro con un delay de 11 segundo.

Por favor me podéis ayudar? graciasssssss
Iván.
  #2 (permalink)  
Antiguo 11/11/2014, 07:03
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Respuesta: Repintar la pantalla en un bucle

Con un Runnable puedes hacer que se repita cada 11 segundos de esta forma:

Código Java:
Ver original
  1. private Handler miHandler;
  2. private Runnable miRunnable;
  3.  
  4. ..
  5.  
  6. this.miHandler = new Handler();
  7.  
  8. this.miRunnable = new Runnable() {
  9.     @Override
  10.     public void run() {
  11.         //tu accion
  12.        
  13.         miHandler.postDelayed(this,11000);
  14.     }
  15. };
  16.  
  17. this.miRunnable.run();

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #3 (permalink)  
Antiguo 14/11/2014, 06:18
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Repintar la pantalla en un bucle

Hola Metallick, mil gracias por responder.

He probado lo que me dices, pero me sigue pasando lo mismo, no se ve ningun pause en la app. De hecho recorre todo el bucle sin ningun pause entre cada iteracion.
Te adjunto el codigo, a lo mejor estoy usando mal el runnable:

private Handler miHandler;
private Runnable miRunnable;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.maingame);

RelativeLayout layout1 = (RelativeLayout) findViewById(R.id.layout1);
fondo = new Lienzo(this);
fondo.setOnTouchListener(this);
layout1.addView(fondo);


//Creamos la secuencia de casillas para memorizar
nivel = 3;
int num_filas = 3;
int num_columnas = 3;
secuencia = crearSecuencia(nivel,num_filas,num_columnas);

this.miHandler = new Handler();
this.miRunnable = new Runnable() {

@Override
public void run() {
//tu accion
for (int i=0; i<nivel; i++){
int casilla_num = (3*secuencia[i][0]) + 1 + secuencia[i][1];

casilla_tocada[0] = secuencia[i][0];
casilla_tocada[1] = secuencia[i][1];
fondo.invalidate();
miHandler.postDelayed(this,3000);
}


}
};
this.miRunnable.run();


}

No estoy seguro, pero creo que el problema radica en la accion invalidate, de manera que se me ejecutan todos los invalidates del bucle sin que se observe ningun pause entre ellos.

Por favor, espero que me puedas ayudar.

Un saludo y gracias,
Iván.

Etiquetas: app, bucle, pantalla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:06.