Aller au contenu

Alterner Deux Images dans un image View


Kussmaul

Recommended Posts

Salut à tous,

Je souhaiterais donner un peu de vie au lancement de mon application.

Pour celà je souhaiterais alterner 2 images toute les 250ms pendant 3000ms.

Comment puis-je modifier la source de mon images de façon transparente ?

Actuellement j'ai :

  imageViewLogo.setImageResource(R.drawable.break_battle_ok);

       setContentView(imageViewLogo);

       Timer timerLogoFin = new Timer();

       timerLogoFin.schedule(new TimerTask() {

           @Override
           public void run() {
               finish();
           }

       }, 3000);

J'affiche ici mon image pendant 3 seconde puis je ferme mon activity.

Lorsque j'attaque directement :

- imageViewLogo.setImageResource(ma_deuxieme_image);

dans un autre timer de 250 ms pour creer une première alternance, l'application plante :s. Une idée?

Lien vers le commentaire
Partager sur d’autres sites

Regarde ton DDMS, mais tu doit avec un soucis avec le thread qui ne peux pas modifier le thread UI, peut être utiliser un handler ?

http://www.ace-art.fr/wordpress/2010/09/24/les-threads-et-les-boites-de-progression/

Ou utiliser les AsyncTask.

Et si cela ne viens pas de là, met les traces du ddms sur le forum on pourra peut être t'en dire un petit peu plus

J'espère t'avoir éclairé ;)

Lien vers le commentaire
Partager sur d’autres sites

Regarde ton DDMS, mais tu doit avec un soucis avec le thread qui ne peux pas modifier le thread UI, peut être utiliser un handler ?

http://www.ace-art.fr/wordpress/2010/09/24/les-threads-et-les-boites-de-progression/

Ou utiliser les AsyncTask.

Et si cela ne viens pas de là, met les traces du ddms sur le forum on pourra peut être t'en dire un petit peu plus

J'espère t'avoir éclairé ;)

Super Réponse Acesyde, je jete un oeil sur le DDMS et je vais explorer la piste des Handler.

Sinon, je posterai l'erreur que retourne le LogCat.

Merci ;)

Lien vers le commentaire
Partager sur d’autres sites

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Okay voici l'erreur,

Apparament, seul le thread qui à créée la view peut modifié la view ...

Je vais explorer la piste des "AsyncTask"

Lien vers le commentaire
Partager sur d’autres sites

Okay j'ai trouver une solution qui semble marcher plutôt correctement, je passe par un Thread qui appelle un Handle, ce dernier execute le changement d'image.

Source :

public class Logo_Activity extends Activity {

ImageView imageBackground;
int i = 0;

Handler handler=new Handler() {

	@Override
	public void handleMessage(Message msg) {
		if (i == 0) {
			imageBackground.setImageResource(R.drawable.break_battle_ko);
			i = 1;
		}
		else {
			imageBackground.setImageResource(R.drawable.break_battle_ok);
			i = 0;
		}
	}

};
boolean isRunning = false;

@Override
public void onCreate(Bundle icicle) {
	super.onCreate(icicle);
	setContentView(R.layout.logo);
	imageBackground=(ImageView)findViewById(R.id.ImageViewLogo);
}

public void onStart() {
	super.onStart();
	Thread Switch_background = new Thread(new Runnable() {
		public void run() {
			try {
				for (int i=0;i<10 && isRunning;i++) {
					Thread.sleep(250);
					handler.sendMessage(handler.obtainMessage());
				}
			}
			catch (Throwable t) {
			}
		}
	});
	isRunning=true;
	Switch_background.start();
}

public void onStop() {
	super.onStop();
	isRunning=false;
}
}

Je reste à disposition pour d'eventuelles question.

;)

Lien vers le commentaire
Partager sur d’autres sites

C'est pas quelque chose qui marche assez bien, c'est quelque chose qui marche tout court :emo_im_angel:

L'UI possède son propre thread, qui correspond à celui de l'application, si jamais tu essayes de le modifier de l'extérieur cela provoque une erreur, ce n'est pas spécifique à Android, à beaucoup de langage Java/C# et j'en passe ....

C'est de la programmation propre ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

Regarde ton DDMS, mais tu doit avec un soucis avec le thread qui ne peux pas modifier le thread UI, peut être utiliser un handler ?

http://www.ace-art.fr/wordpress/2010/09/24/les-threads-et-les-boites-de-progression/

Ou utiliser les AsyncTask.

Et si cela ne viens pas de là, met les traces du ddms sur le forum on pourra peut être t'en dire un petit peu plus

J'espère t'avoir éclairé ;)

Super , c 'est la bonne réponse parce que le seul thread qui a le droit de modifier les widgets et l'interface graphique ,est le UiThread

Sinon , tu peux penser à utiliser un thread qui fait ce traitement , et utiliser soit les handlers soit la méthode :

runOnUiThread( new Runnable(){

@override

public void run() {

//do something

}

});

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...