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);
		}
		});
    }
}