Kussmaul Posté(e) 16 décembre 2010 Share Posté(e) 16 décembre 2010 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 More sharing options...
acesyde Posté(e) 17 décembre 2010 Share Posté(e) 17 décembre 2010 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 More sharing options...
Kussmaul Posté(e) 17 décembre 2010 Auteur Share Posté(e) 17 décembre 2010 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 More sharing options...
Kussmaul Posté(e) 17 décembre 2010 Auteur Share Posté(e) 17 décembre 2010 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 More sharing options...
Kussmaul Posté(e) 17 décembre 2010 Auteur Share Posté(e) 17 décembre 2010 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 More sharing options...
acesyde Posté(e) 17 décembre 2010 Share Posté(e) 17 décembre 2010 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 More sharing options...
hocinao Posté(e) 23 février 2011 Share Posté(e) 23 février 2011 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.