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

Android Discussion :

Animation d'un objet


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Animation d'un objet
    Bonsoir,

    Je viens a vous car je suis en galère sur une phase d'un projet que je développe.

    Je souhaite faire déplacer à l'écran un objet (en ligne droite pour l'instant). Pour ce faire j'ai créé une vue que j'ai appelé GameView dans laquelle j'instancie mon objet (en l’occurrence un cercle). Dans cette vue il y'a également la méthode qui est censé se faire se déplacer l'objet seul, c'est à dire la boucle dans laquelle j'incrémente les coordonnées afin qu'il se déplace puis a méthode qui permet d'actualiser la vue avec les nouvelles coordonnés. Dans cette boucle, j'appelle un Thread.sleep afin d'attendre entre chaque tour de boucle dans le but de donner une impression de mouvement (plus ou moins fluide).

    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
        public void run(){
    		int i =0;
    //		boolean avancer = true;
    		int devX = 25;
     
    		for(i=0;i<2;i++){
    			int x = this.d1.getX();
     
    //			x++;
    			this.d1.setX(x+devX);
    			this.invalidate();
    			try {
    		        Thread.sleep(1000);
    		      } catch (InterruptedException e) {
    		        e.printStackTrace();
    		      }
     
    		}
    	}
    Le problème c'est que l'objet ne se rafraichie pas à chaque tour de boucle comme je l’espérais mais a la fin de la boucle donc aucune impression de fluidité ce qui est embêtant car la finalité c'est justement de faire se déplacer mon objet à l'écran tout seul.
    Quelqu'un pourrais t-il m'apporter des conseils sur la façon de faire car je suis vraiment largué. En java normal ça va mais sur android j'ai plus de mal.
    D'avance je vous remercie.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben non... puisque la fonction ne renvient jamais, au mieux l'affichage se raffraichit à la fin de la boucle... au pire, l'application plante avec un "ANR".

    Vraiment... à moins de gérer un truc complexe sur les threads... *N'Utilisez *jamais*jamais*jamais* Thread.sleep()* (et même quand on pourrait éventuellement l'utiliser, Object.wait() est souvent plus adapté).

    Si à un moment vous voulez utiliser Thread.sleep(), c'est qu'il manque un listener / un handler, bref un truc lié aux frameworks par messages.

    En l'occurence, Android propose tout un tas d'animations pour animer les views, sans faire quoique ce soit.
    http://developer.android.com/guide/t...animation.html
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre éclairé
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Points : 832
    Points
    832
    Par défaut
    Comme le dit nicroman,
    il faut utiliser des Handler ce qui te permettra d'envoyer des messages au main thread pour rafraîchir ta view depuis n'importe quels autres thread.

    PS : A savoir, le rafraîchissement des view sur android est limité à environ 50ms (à confirmer), pour avoir plus performant il faut se tourner vers une SurfaceView.
    "Quand la lune n'est pas là, la nuit mène une existence obscure"

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Depuis Android 4.3 (ou 4.2?) c'est 20ms (50Hz).

    De toute manière, même à 50ms ce n'est pas "visible" normalement (sauf si le téléphone rame et "saute" un frame).

    Mais bon, pour animer un objet, le mieux est *vraiment* de laisser faire le système en utilisant le framework des animations (qui utilisera le render graph opengl si disponible du système).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Une seule Animation pour mes objets
    Par toss.net dans le forum Silverlight
    Réponses: 6
    Dernier message: 11/11/2010, 14h58
  2. Réponses: 0
    Dernier message: 24/09/2010, 08h31
  3. animation d'un objet
    Par shadow07 dans le forum MFC
    Réponses: 2
    Dernier message: 07/04/2010, 21h33
  4. animation d'un objet 2d
    Par greg08 dans le forum 2D
    Réponses: 1
    Dernier message: 03/11/2008, 16h32
  5. Animations avec différents objet
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/06/2004, 14h18

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