getProjection relativ zu einem Layoutelement (mapview) möglich? Offset ermitteln?

  • Antworten:1
  • Bentwortet
Thorsten
  • Forum-Beiträge: 4

24.12.2012, 11:06:55 via Website

Hallo!

Ich habe für meine App eine eigene MyMapView Klasse erstellt, die die standard MapView Klasse erweitert.
Das Layout meiner App ist hierbei folgendes LinearLayout (aus einer XML-Datei):

1[ Buttons ]
2[ Text ]
3[ Buttons ]
4[ MapView]

Jetzt habe ich meine MainActivity, die die MapActivity erweitert:

1public class MainActivity extends MapActivity implements LocationListener {
2...
3private MyMapView mapView;
4...
5@Override
6public void onCreate(Bundle savedInstanceState) {
7....
8 mapView = (MyMapView) findViewById(R.id.mapview);
9 mapView.setBuiltInZoomControls(true);
10 mapView.setOnLongPressListener(this.mapLongpressListerner);
11....
12}
13}

Innerhalb von MyMapView gibt es einen OnLongpressListener, der bei einem langen Druck auf eine Position in der Karte den dazu gehörenden GeoPoint zurück liefern soll. Dazu habe in der MyMapView Klasse im Listener folgendes stehen:

1GeoPoint longpressLocation = getProjection().fromPixels((int) event.getX(), (int) event.getY());

Mein Problem ist jetzt das die getProjection() Methode mir immer die Koordinaten relativ zum Bildschirmrand liefert und nicht relativ zur MapView. Dadurch stimmt der Geopoint natürlich nicht mehr. Ich habe auch ehrlich gesagt null Ahnung, wie ich innerhalb meines MainActivity Layouts das Offset der MapView zum Bildschirmrand herausfinden kann, damit ich in der MyMapView den X/Y-Werten einen Offset hinzufügen kann.

Hat jemand eine Idee?

Achja... schöne Weihnachtstage!!! :)

Antworten
Thorsten
  • Forum-Beiträge: 4

28.12.2012, 14:40:55 via Website

Sooo.. ich habe es jetzt Quick&Dirty gelöst. Meine Methode liefert jetzt auch die X/Y-Position auf dem Bildschirm zurück. In der MainActivity schreibe ich jetzt:

1public void onLongPress(final MapView view, final GeoPoint longpressLocation,
2 final float xPos, final float yPos) {
3View mapOffset = findViewById(R.id.mapview);
4
5int[] loc = {0,0};
6mapOffset.getLocationOnScreen(loc );
7GeoPoint gp = mapView.getProjection().fromPixels((int)(xPos-loc[0]), (int)(yPos-loc[1]));
8
9customLongitude = gp.getLongitudeE6();
10customLatitude = gp.getLatitudeE6();
11customAccuracy = 20;
12}

Damit geht es mit dem Offset. ;)

Antworten