IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Android, rafraichissement ImageView


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Par défaut Android, rafraichissement ImageView
    Bonjour,

    je suis débutant sous Androïd et je cherche à créer un "Slide Show". Pour être plus précis je veux pouvoir changer une ImageView toutes les 5 secondes.

    Pour cela j'utilise une classe qui gère tout cela. Ma première image s'affiche bien mais après un certain temps d'attente aucun changement n'est visible. J'ai vérifié mon Timer, et celui-ci fonctionne bien: la méthode qui doit modifier mon ImageView est bien appelée. J'en ai donc conclu que le problème venait du rafraichissement de mon image (pour information, lorsque je retourne sur le bureau d'Androïd et que je retourne à mon application, le changement est bien visible, ce qui, je pense, confirme mon hypothèse).

    Serait-il possible de m'expliquer comment résoudre mon problème, ou au moins m'indiquer d'où vient l'erreur. Étant débutant dans cette technologie je suis tout à fait ouvert aux critiques et conseils que les plus expérimentés pourront m'apporter ^^.

    Explication de ma classe:
    - Dans le main je vais créer un nouveau SlideShow.
    - Mon constructeur me crée mes objets "Event" qui possèdent les images à afficher
    - L'attribut "elementAffiche" me permet de savoir quelle image est actuellement affichée
    - J'appelle ensuite dans le main la méthode "startSlideShow"
    - Celle-ci appelle loadAffiche qui sera chargée de modifier mon ImageView
    - Je lance ensuite le Timer avec "startTimer"
    - Je n'explique pas le fonctionnement du Timer, c'est du classique avec une classe interne. Tout ce qu'il faut savoir c'est que toutes les 5 secondes il appelle la classe "loadAffiche" avec comme argument le Drawable à placer dans notre ImageView.
    - Comme je l'ai expliqué la méthode "loadAffiche" est bien appelée, l'ImageView est bien modifiée, mais cette modification n'est pas visible à l'écran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package com.example.ticketnetandroid; 
     
    import java.util.Timer; 
    import java.util.TimerTask; 
    import android.app.Activity; 
    import android.graphics.drawable.Drawable; 
    import android.widget.ImageView; 
     
    public class SlideShow  { 
     
        private Event event1; 
        private Event event2; 
        private Event event3; 
        private Event event4;  
        private Event event5; 
        private Event event6; 
        private ImageView affiche; 
        private Timer t; 
        private int elementAffiche; 
     
        public SlideShow(Activity activity){ 
         event1 = new Event(1); 
         event2 = new Event(2); 
         event3 = new Event(3); 
         event4 = new Event(4); 
         event5 = new Event(5); 
         event6 = new Event(6); 
            affiche = (ImageView)activity.findViewById(R.id.SlideShowAffiche); 
         elementAffiche = 1; 
        } 
     
     public void startSlideShow(){ 
      loadAffiche(event1.get_Image()); 
      startTimer(); 
     } 
     
     private void loadAffiche(Drawable image){ 
      affiche.setImageDrawable(image); 
     } 
     
     private void startTimer(){ 
      t = new Timer(); 
      t.schedule(new ActionRepeat(), 5000, 5000); 
     } 
     
     class ActionRepeat extends TimerTask{ 
     
      public void run(){ 
       switch(elementAffiche){ 
        case 1: 
         loadAffiche(event2.get_Image()); 
         break; 
        case 2: 
         loadAffiche(event3.get_Image());  
         break; 
        case 3: 
         loadAffiche(event4.get_Image()); 
         break; 
        case 4: 
         loadAffiche(event5.get_Image()); 
         break; 
        case 5: 
         loadAffiche(event6.get_Image()); 
         break; 
        case 6: 
         loadAffiche(event1.get_Image());  
         elementAffiche = 0; 
         break; 
       } 
     
       elementAffiche++; 
      } 
     } 
    }
    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Personnellement, je serai toi, je changerai event1..6 en une List<Drawable>, à laquelle je rajouterai les drawable et qui bouclerai suivant sa taille pour le slideshow. C'est un peu plus compliqué à mettre en place, mais plus simple pour le reste, puisque si ton slideshow passe à 4 ou à 15, tu n'as pas besoin de changer le nombre de "Event" que tu as et le switch, juste remplir plus ou moins la liste.

    Sinon, après le changement, tente un tonImageView.invalidate();. Ca fait longtemps que je n'ai pas rejoué avec ce type de chose.

    EDIT : tu n'es pas sur le thread graphique quand tu changes l'image. Intéresse-toi à runOnUIThread()
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Oui, les changements d'états des éléments graphiques ne sont répercutés immédiatement que lorsqu'ils sont effectués dans le Thread graphique. Comme l'a dit Hizin, tu peux utiliser la méthode runInUIThread() ou alors passer par un Handler (qui lui s'exécute dans le Thread graphique) avec la méthode postMessageDelayed()

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Par défaut
    OK, merci pour les conseils.

    Pour la liste je comptais faire comme tu indiques, mais j'ai utilisé cette solution temporairement en attendant de mettre en place mon web service.

    Le invalidate ne fonctionne pas, j'ai déjà testé beaucoup de solutions avant de poster ^^

    Je n'ai par contre pas vu la dernière méthode dont tu parles. Je vais me renseigner là dessus. Merci beaucoup

    EDIT: ça fonctionne très bien ! Merci beaucoup à vous deux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Android studio] Mon ImageView pivote seule quand je la mets !
    Par brucebr dans le forum Android Studio
    Réponses: 2
    Dernier message: 17/06/2015, 14h04
  2. [Android] - Problème rafraichissement Listview
    Par devJavaJEE dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 20/05/2014, 12h01
  3. android.widget.imageview probléme affichage
    Par chlock62 dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 11/03/2014, 17h33
  4. Rafraichissement du GUI sous android
    Par nouvelesprit dans le forum Android
    Réponses: 4
    Dernier message: 27/04/2010, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo