![]() |
|
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Cambiar fondo secuencialmente
Hola compañeros
estoy realizando una app y necesito que cuando le doy a un boton, se abra una activity y muiestre un fondo, pero a los dos o tres segundo muestre otro, y asi. Lo he intentado con el metodo OnStart y bueno lo que hace es que la muestra en blanco, he probado dos modos @Override Protected void onStart() { solo muestra en blanco protected void onStart(Bundle savedInstanceState) { -- estre muestra el ultimo fondo definido, pero no los intermedios. He de decir que he implementado un delay, para que se vaya viendo los cambios Gracias de antemano |
|
|
|
#2
|
||||
|
||||
|
Si el delay lo estás haciendo con Thread.sleep estás bloqueando el hilo de ejecución y por eso solo se muestra el último fondo. Android no puede refrescar la pantalla mientras tienes el control del hilo principal.
Soluciones hay varias, bien usando el Handler y el método postDelayed para programar el cambio de fondo en el tiempo que sea o usar los temporizadores (clase Timer, aunque podría tener problemas al actualizar elementos de la interfaz gráfica), o incluso otro hilo (idem). A mí personalmente me gusta el handler. Aquí tienes un ejemplo: http://www.mopri.de/2010/timertask-b...use-a-handler |
|
#3
|
||||
|
||||
|
Muchas gracias, voy a probar
|
|
#4
|
|
Buenas.
Yo lo he hecho para cambiar alguna view usando scheduleAtFixedRate de la siguiente manera En onCreate pones esto: (esta programado para poner 4 Imagenes diferentes) Código:
int anima=0;
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
handler.post(new Runnable(){
@Override
public void run() {
if(anima==0){
amimarInfo(Imagenes.previews[0]);
anima=1;
}
else if(anima==1){
amimarInfo(Imagenes.previews[1]);
anima=2;
}
else if (anima==2){
amimarInfo(Imagenes.previews[2]);
anima=3;
}
else if (anima==3){
amimarInfo(Imagenes.previews[3]);
anima=4;
}else if(anima==4){
amimarInfo(Imagenes.previews[4]);
anima=0;
}
}
});
}
}, 0, 6000);
Código:
public void amimarfondo(int img ){
yourLayout.setBackgroundResource(img);
}
Usa tambien el handler como dice mocelet para no bloquear el hilo principal Supongo que habra mil formas de hacerlo pero a mi se me ocurrio hacer esta aunque los cambios los hacia tambien con animaciones, pero funcionar funciona. |
|
#5
|
||||
|
||||
|
Si usas handler te sobra el timertask, con un postDelayed ya programas la siguiente ejecución cuando toque.
|
|
#6
|
|
Con postDelayed ejecutas lo que tienes dentro pasado un tiempo en milisegundos y sobra el Timer pero el quiere que se ejecute de forma continua , por eso uso el scheduleAtFixedRate usando el timer, ¿o hay alguna forma de que se ejecute en forma de bucle con el postdelayed?
pero vamos que habrá mil formas de hacerlo digo yo. Un saludo. |
|
#7
|
||||
|
||||
|
Claro, llamando al postDelayed justo al final del runnable para que se vuelva a ejecutar (es lo que hace en ejemplo que le puse enlace) . El runnable por cierto no hace falta crearlo cada vez, puedes guardar el objeto en una variable y reutilizarlo.
|
|
#8
|
|
ah ok, no me fije bien en el link. La verdad que es un buen truco y no usas el scheduleAtFixedRate.
Un saludo. |
|
#9
|
||||
|
||||
|
Gracias a todos por vuestra ayuda, sois geniales
|
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 23:15:42 (GMT +1)
HTCMania: líderes desde el 2007





