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 :

Thread de dessin d'un SurfaceView


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Par défaut Thread de dessin d'un SurfaceView
    Bonjour, j'ai regardé plusieurs tutoriels sur la création d'un SurfaceView, mais je n'ai pas compris pourquoi on fait une boucle (infinie) pour dessiner plusieurs fois sur ce SurfaceView alors qu'un seul dessin ça marche pour moi??
    voici un exemple:

    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
    class DrawingThread extends Thread {
    	// Utilisé pour arrêter le dessin quand il le faut
            boolean keepDrawing = true;    	
            @Override
            public void run() {
     
               while (keepDrawing) {
                    Canvas canvas = null;
                    try {
    		    // On récupère le canvas pour dessiner dessus
                        canvas = mSurfaceHolder.lockCanvas();
    		    // On s'assure qu'aucun autre thread n'accède au holder
                        synchronized (mSurfaceHolder) {
    			// Et on dessine                  
                        	Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); 
                        	 paint.setColor(Color.GREEN);
                            canvas.drawCircle(10,10 , 50, paint);
                        }
                    } finally {
                        if (canvas != null)
                            mSurfaceHolder.unlockCanvasAndPost(canvas);
                    }
                    try {
                        Thread.sleep(20);
                    } catch (InterruptedException e) {}
                }
            }
        }

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut
    bonjour,
    je pnese que boucle utile dans le cadre d'une animation, ou d'un jeu video, donc quand il faut redessiner sur la surfaceView tous les x temps.

    Et effectivement si tu veux juste dessiner des boutons , texte ... tu n'as pas besoin de la boucle infinie.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Par défaut
    Merci pour la réponse. j'ai déjà essayer de faire une animation, mais ça était moche , le nombre de fps n'est pas fixe du tout, donc la vitesse de l'animation dépend de la vitesse du processeur de l'appareil !!

  4. #4
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    [mode rant on]

    Quand on voit "Thread.sleep()" dans un tutorial, on peut déjà le mettre à la poubelle
    [/mode]

    Non sans rire, Thread.sleep() ne sert *que* dans de très rares cas de schedulers de threads ou de test-case, et encore, on lui préfère "object.wait()" la plupart du temps.

    Pour une animation, on aura sans doute plutôt un thread du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    long startt = System.currentTimeMillis();
    long endt = startt + duration;
    while (drawing) {
        long framet = System.currentTimeMillis();
        float t = (framet - startt) / duration;
        if (t > 1.0f) { t = 1.0; drawing = false; }
        //
        // dessin de l'animation à l'état "t" (entre 0 le début et 1 la fin)
    }

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

Discussions similaires

  1. Thread et dessin
    Par KiranoO dans le forum 2D
    Réponses: 1
    Dernier message: 02/05/2012, 14h00
  2. Réponses: 1
    Dernier message: 05/03/2009, 15h21
  3. [WD11] Thread et fonctions de dessin
    Par hegros dans le forum WinDev
    Réponses: 5
    Dernier message: 26/03/2007, 16h11
  4. [Debutant] Un thread qui dessine sur une fenetre ???
    Par Spartan03 dans le forum OpenGL
    Réponses: 6
    Dernier message: 05/04/2006, 20h19
  5. [VS 2003][dessin] synchronizer un thread avec une forme
    Par Harry_polin dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/10/2005, 10h31

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