Bonjour,

la methode Canvas#drawBitmap dessine bien l'image sans souci, en revanche un appel à le méthode drawRect me plante dans les doigts!

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
package lepioo.canvastest;
 
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
 
public class CanvasSurface extends Activity {
 
    //-- Définition d'une vue v de type EcranDessin
    EcranDessin v;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //-- Création d'une view à partir de la Class SurfaceView
        v = new EcranDessin(this);
 
        //-- Indique à l'activité d'utiliser la view v
        setContentView(v);
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        v.pause();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        v.resume();
    }
 
    public class EcranDessin extends SurfaceView implements Runnable{
        //--
        Thread t = null;
        //-- Déclaration du "Holder" utile pour les manipulations
        SurfaceHolder holder;
        Paint p;
        //-- Drapeau de contrôle
        boolean isItOk = false;
 
        public EcranDessin(Context context) {
            super(context);
            Paint p = new Paint();
            p.setStyle(Paint.Style.FILL);
            p.setColor(Color.parseColor("#FF0000"));
            //-- lancement du Holder
            holder = getHolder();
            System.out.println("CONSTRUCTOR");
        }
 
        public void run() {
            while (isItOk==true) {
                //-- On peut dessiner si le holder est disponible
                if (!holder.getSurface().isValid())
                    continue;
                //-- Définition d'un canevas, et veroullage le temps que l'on dessine dessus
                Canvas c = holder.lockCanvas();
 
                //Bitmap bille=BitmapFactory.decodeResource(getResources(),R.drawable.bille);
                //c.drawBitmap(bille, 200,200, null);
                c.drawRect(0,0,10,10,p);
 
                //-- Libération du dessin
                holder.unlockCanvasAndPost(c);
            }
        }
 
        public void pause() {
            //-- Zone de dessin indisponible
            isItOk=false;
            //-- Tant que on est en Pause
            while (true) {
                try {
                    t.join(); //--tente de relancer le Thread
                }
                catch (InterruptedException e)
                {e.printStackTrace();}
                break;
            }
            t=null;
        }
 
        public void resume() {
            //-- Zone de dessin disponible
            isItOk=true;
            //-- On peut dessiner, donc on créé un Tread pour dessiner !
            t = new Thread(this); 
            //-- This appele ici la method run() de la class
            t.start();
        }
    }
}
l'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
E/AndroidRuntime: FATAL EXCEPTION: Thread-4
                  Process: lepioo.canvastest, PID: 11206
                  java.lang.NullPointerException: Attempt to invoke virtual method 'long android.graphics.Paint.getNativeInstance()' on a null object reference
                      at android.graphics.BaseCanvas.drawRect(BaseCanvas.java:342)
                      at android.graphics.Canvas.drawRect(Canvas.java:1748)
                      at lepioo.canvastest.CanvasSurface$EcranDessin.run(CanvasSurface.java:83)
                      at java.lang.Thread.run(Thread.java:764)
Qu'ai-je fait de travers?

ps:Il en est de même pour la méthode drawLine qui plante également avec la même erreur