Kussmaul Posted December 16, 2010 Share Posted December 16, 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? Link to comment Share on other sites More sharing options...
acesyde Posted December 17, 2010 Share Posted December 17, 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é ;) Link to comment Share on other sites More sharing options...
Kussmaul Posted December 17, 2010 Author Share Posted December 17, 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 ;) Link to comment Share on other sites More sharing options...
Kussmaul Posted December 17, 2010 Author Share Posted December 17, 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" Link to comment Share on other sites More sharing options...
Kussmaul Posted December 17, 2010 Author Share Posted December 17, 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. ;) Link to comment Share on other sites More sharing options...
acesyde Posted December 17, 2010 Share Posted December 17, 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 ;) Link to comment Share on other sites More sharing options...
hocinao Posted February 23, 2011 Share Posted February 23, 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 } }); Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.