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 :

Dessiner dans un layout


Sujet :

Composants graphiques Android

  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Dessiner dans un layout
    Bonjour à toutes et à tous,

    Je souhaite dessiner dans un layout (des lignes toutes simples) qui change à chaque fois que j'appuie sur un bouton. Le code suivant fonctionne ... de manière bancale ... ce qui ne m'étonne pas.

    Mon problème : à la fin du code, dans la méthode : void onClick(View v), je ne sais pas où récupérer le canvas de mon layout, d'où l'idée (farfelue) de le recopier dans la méthode locale OnDraw.

    Question : où trouve-t-on ce canvas ? c'est une variable de quel objet ? Je tourne rond et n'arrive pas à trouver.

    Merci de votre aide.

    Pierre


    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
    package com.example.test_01;
     
    import java.util.Random;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.View;
    import android.widget.Button;
    import android.widget.LinearLayout;
     
    public class MainActivity extends Activity {
    	Button Transfert;
    	LinearLayout Img;
    	Canvas CnvG;                                   //variable pour stocker le canvas du layout
    	private static Random random =  new Random() ;
    	float Y = 1;
     
        private class Dessin extends View {
    		public Dessin(Context context) {
    			super(context);
    		}
    		@Override
    	       protected void onDraw(Canvas Cnv) {   //Cnv est le canvas local à la classe Dessin
    	           super.onDraw(Cnv);
    	           Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);;
    	           paint.setColor(Color.GREEN);
    	           paint.setStrokeWidth(3);
    	           Y = 100*random.nextFloat();
                    Cnv.drawLine(0, 0, 200, Y, paint);
                   CnvG = Cnv;                           //Je récupère ce canvas
    	}
    }
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    	    Img = (LinearLayout)findViewById(R.id.image);
            final Dessin MonImg = new Dessin(this);
            Img.addView(MonImg);
            Transfert = (Button)findViewById(R.id.button1);
            Transfert.setOnClickListener(new View.OnClickListener() {
     
    			@Override
    			public void onClick(View v) {
    				MonImg.onDraw(CnvG);   //j'utilise ici le canvas récupéré
    				Img.draw(CnvG);
    		}
    		});
        }
    }

  2. #2
    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
    Ce n'est pas la bonne méthode. Tu ne dois pas avoir à enregistrer ce canvas.
    Tu dois simplement demander à ta vue de se redessiner avec la méthode View.invalidate()

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci Simonmarky, cela fonctionne bien.

    Il y a toujours un autre problème (qui ne semble pas lié à la solution que tu me donnes) : quand je clique sur le bouton, parfois, " l'invalidation " semble être provoquée plusieurs fois d'un coup alors que je clique franchement sur le bouton. Je n'ai pas de smartphone ; est-ce que cela vient de l'émulateur ?

    Cordialement.

    Pierre

  4. #4
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    En fait, cet autre problème provient de l'opérateur "random" placé dans la classe Dessin, en le mettant ailleurs, le problème disparait.

    Cordialement.

    Pierre

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

Discussions similaires

  1. Dessiner dans différents JPanels
    Par N@sH dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/05/2005, 15h39
  2. DBGrid, comment dessiner dans les titres des colonnes
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 04/11/2004, 17h49
  3. [debutant]dessins dans une fenetre
    Par drosophile dans le forum 2D
    Réponses: 4
    Dernier message: 04/11/2004, 14h55
  4. Dessin dans les panels d'un TStatusBar
    Par Amenofis dans le forum Composants VCL
    Réponses: 4
    Dernier message: 31/08/2004, 18h45
  5. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 12h13

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