Bonjour,

Je suis en train de développer une activité qui affiche une carte et des bouées (sous forme d'images dessinées sur un canvas), et au dessus une boussole, elle même aussi dessinée sur un canvas. Le soucis est que je n'arrive pas à dissocier les deux canvas pour que seulement la boussole tourne (canvas.rotate), et non pas la carte aussi, car les deux éléments sont sur le même canvas.

Est-ce possible de créer deux canvas pour que le rotate n'agisse que sur l'un d'autre eux? J'ai essayé de déclarer un autre canvas dans le onDraw, mais ça ne fonctionne pas :/

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
protected void onDraw(Canvas canvas) {
 
			//compass
			Paint paint = mPaint;
			canvas.drawColor(Color.WHITE);
 
            paint.setAntiAlias(true);
            paint.setColor(Color.BLACK);
            paint.setStyle(Paint.Style.FILL);
 
            int w = canvas.getWidth();
            int h = canvas.getHeight();
            int cx = w / 2;
            int cy = 60;//h / 2;
 
            canvas.translate(cx, cy);
            if (mValues != null) {            
                canvas.rotate(cap-mValues[0]);
            }
            canvas.drawPath(mPath, mPaint);
			//compass
 
 
 
 
			// on dessine la partie haute
			//Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.test_1_mai);
			// dimensions de l'image
 
			if (bmp == null) {
				Toast.makeText(getContext(), "bug creationbitmap",
						Toast.LENGTH_LONG).show();
			} else {
				canvas.drawBitmap(bmp, 0, marge_y, bateau);
			}
			// Instance de Paint pour définir l'attribut couleur de notre point,
			// ainsi que
			// sa taille.
 
 
			String str = taille_vecteur + "";
			for (i = 0; i < taille_vecteur; i = i + 3) {
				double lati_vect = (Double) vect.get(i+1);
				 //str = lati_vect + "";
				 //Toast.makeText(getContext(), str, Toast.LENGTH_LONG).show();
				double longi_vect = (Double) vect.get(i + 2);
 
				int[] point_bouee4 = FonctionsGPS.repereGPStoPixel(lati_vect,
						longi_vect, origine[0], origine[1], echellePix[0],
						echellePix[1], reso_y, marge_x, marge_y);
 
				if((String) vect.get(i) == "bouees"){
					canvas.drawCircle(point_bouee4[0], point_bouee4[1], 7, bouees);
					if(i>0){//Récupération des coordonnées de la bouée précédente pour tracer un trait entre les deux
						int[] point_bouee5 = FonctionsGPS.repereGPStoPixel((Double) vect.get(i-2),
								(Double) vect.get(i-1), origine[0], origine[1], echellePix[0],
								echellePix[1], reso_y, marge_x, marge_y);
						canvas.drawLine(point_bouee5[0], point_bouee5[1], point_bouee4[0],
								point_bouee4[1], trait);
 
					}					
				}
 
				else if ((String) vect.get(i) == "bateau")
					canvas.drawCircle(point_bouee4[0], point_bouee4[1], 4, bateau);
			}
		}
Petite capture pour vous montrer le soucis :



Merci d'avance pour votre aide !