Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 31/08/14, 20:36:50
Avatar de violgore
violgore violgore no está en línea
Miembro del foro
Mensajes: 102
 
Fecha de registro: may 2010
Mensajes: 102
Modelo de smartphone: S4
Mencionado: 1 comentarios
Tagged: 0 hilos
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
Responder Con Cita


  #2  
Viejo 31/08/14, 22:42:26
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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
Responder Con Cita
  #3  
Viejo 01/09/14, 19:09:25
Avatar de violgore
violgore violgore no está en línea
Miembro del foro
Mensajes: 102
 
Fecha de registro: may 2010
Mensajes: 102
Modelo de smartphone: S4
Mencionado: 1 comentarios
Tagged: 0 hilos
Muchas gracias, voy a probar
Responder Con Cita
  #4  
Viejo 01/09/14, 19:17:17
Avatar de manolazo
manolazo manolazo no está en línea
Miembro del foro
Mensajes: 219
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
Mencionado: 1 comentarios
Tagged: 0 hilos
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);
EN donde amimarInfo es :

Código:
public void amimarfondo(int img ){
		
		yourLayout.setBackgroundResource(img);
	}
donde yourLayout es tu layout previamente definido con su ID y donde las imagenes las almacenas en un array o un arrayList o lo que quieras.

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.
Responder Con Cita
  #5  
Viejo 01/09/14, 19:27:24
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Si usas handler te sobra el timertask, con un postDelayed ya programas la siguiente ejecución cuando toque.
Responder Con Cita
  #6  
Viejo 01/09/14, 22:10:25
Avatar de manolazo
manolazo manolazo no está en línea
Miembro del foro
Mensajes: 219
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
Mencionado: 1 comentarios
Tagged: 0 hilos
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.
Responder Con Cita
  #7  
Viejo 01/09/14, 22:39:01
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
  #8  
Viejo 02/09/14, 00:11:20
Avatar de manolazo
manolazo manolazo no está en línea
Miembro del foro
Mensajes: 219
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
Mencionado: 1 comentarios
Tagged: 0 hilos
ah ok, no me fije bien en el link. La verdad que es un buen truco y no usas el scheduleAtFixedRate.
Un saludo.
Responder Con Cita
  #9  
Viejo 02/09/14, 22:17:35
Avatar de violgore
violgore violgore no está en línea
Miembro del foro
Mensajes: 102
 
Fecha de registro: may 2010
Mensajes: 102
Modelo de smartphone: S4
Mencionado: 1 comentarios
Tagged: 0 hilos
Gracias a todos por vuestra ayuda, sois geniales
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 23:15:42 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007