Bonjour,

Je développe une application de réalité augmentée. Le principe : La caméra se lance en fond et j'y superpose des marqueurs correspondants à des lieux en fonction de leur coordonnées GPS.

Par exemple, si je lance l'application et que je dirige la caméra du téléphone vers un bâtiment dont j'ai les coordonnées GPS, un marqueur s'affichera au niveau du bâtiment et suivra celui-ci lorsque je bougerai le téléphone.

Le problème, c'est qu'il y a parfois plusieurs marqueurs superposés, par exemple si des bâtiments se trouvent l'un derrière l'autre.
Je voudrais donc réussir à afficher les marqueurs les uns en dessous des autres s'ils se superposent.

J'ai essayé avec un RelativeLayout superposé à ma vue de caméra, mais ça ne change rien.

Voici le code de création des marqueurs :

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
@Override
	public void onResume() {
		super.onResume();
 
 
			for(int j=0;j<markers.length;j++) {
				//System.out.println(prefMarkers[j]);
				if(markers[j] == null) {
 
					RelativeLayout.LayoutParams rParams = new RelativeLayout.LayoutParams(
							RelativeLayout.LayoutParams.WRAP_CONTENT,
							RelativeLayout.LayoutParams.WRAP_CONTENT);
 
						markers = new DataList(); // Ma liste de marqueurs
						for(int i=0; i<markers.size();i++) {
							markers[i].setOnClickListener(clickListener);
								//addContentView(markers[j].get(i), params);
								relative.addView(markers[j].get(i), rParams);
						}
					}
				}}}
Et la partie où je déplace mes marqueurs :

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
public final static void moveSpot(Context c, View tv, GeoPoint p,
			float azimut, Location me, int screenWidth, float roll,
			int screenHeight, float pitch) {
		int angle = // Calculs
		RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
				FrameLayout.LayoutParams.WRAP_CONTENT,
				FrameLayout.LayoutParams.WRAP_CONTENT);
 
                lp.leftMargin = -angle * screenWidth / 90;
 
		lp.addRule(RelativeLayout.ABOVE);
 
		tv.setLayoutParams(lp);
	}
 
	public SensorEventListener createListener() {
		return new SensorEventListener() {
			public void onAccuracyChanged(Sensor _sensor, int _accuracy) {
 
			}
 
			public void onSensorChanged(SensorEvent evt) {
				if (evt.sensor.getType() == Sensor.TYPE_ORIENTATION && markers != null) {
 
					for(int j=0;j<markers.length;j++)
						moveSpot(context, markers[i], markers[i]
										.getGeoPoint(), azimut, myLoc,
										mScreenWidth, roll, mScreenHeight, pitch);
 
			}
		};
	}
Je m'y prend sans doute pas de la bonne manière, mais voyez-vous comment je pourrais faire ?

Merci d'avance,

Aenur56