0

Ich habe die folgende Karte, und die Adresse, die ich bekomme, wenn Sie die Kamera mit OnCameraIdleListener zentrieren, aber wie Sie im Bild sehen können, erhalten Sie die Adresse der Mitte des Markers nicht das untere, was du willst. Ich freue mich über Vorschläge. Und sorry für mein EnglischWie bekomme ich die genaue Position eines Overlay-Markers

im Bild sollte die Adresse sein "sucre ..." keine L.Jaimes ......

@Override 
public void onCameraIdle() { 

    Log.i(TAG, "onCameraIdle"); 
    LatLng position = mMap.getCameraPosition().target; 
    if (position != null) { 
     mCurrentLocation.setLatitude(position.latitude); 
     mCurrentLocation.setLongitude(position.longitude); 
     retrieveAddress(position); 
    } 
} 

My Map Fragment

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:orientation="vertical"> 


    <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     tools:context="com.mobifire.edwin.mobifire.UserMaps" /> 

    <ImageView 
     android:id="@+id/imvCurrentMarker" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:src="@drawable/ic_a_marker" /> 

    </RelativeLayout> 

enter image description here

Antwort

0

Dies ist ein häufiges Problem mit dieser Art von Benutzeroberfläche mit Google Maps. Aber ich weiß, du kannst es erreichen, indem du einen Trick machst.

a) Als erstes empfehle ich Ihnen, eine function of Projection von Google Map Android SDK gegeben. Ich spreche über toScreenLocation(LatLng center). Diese Eigenschaft hilft uns, den genauen Bildschirmpunkt zu erhalten, der unserer LatLng-Koordinate entspricht. Wenn Sie diesen Ansatz verwenden, können Sie Ihren Marker leicht in der Mitte der Projektion der Map zentrieren, selbst wenn Sie einen Padding festlegen und den sichtbaren Teil der Map reduzieren.

Ok, der interessante Teil ist, die richtige Position des Zeichens einzustellen, um es zentriert sehen zu können, wo es sein muss, und natürlich die richtige Adresse zu bekommen !!

b) Ermitteln Sie die Höhe und Breite Ihrer Ansicht/Zeichenfläche, und wenn sich der Zeichenbereich in seiner Mitte befindet, müssen Sie eine neue Position um diese Mitte festlegen. Um dies zu erreichen, müssen Sie die Breite in zwei Teile teilen. Dies liegt daran, dass die neue Position zurückgesetzt wird.

c) Und schließlich verschieben Sie es um die Höhe und horizontal um die Hälfte der Breite.

d) Ich denke, es gibt einen anderen Ansatz, und der einfachste, aber nicht cooler! haha Dies ist nur, bewegen Sie sich mit einem negativen Rand um die Gesamtgröße der Höhe. So haben Sie eine 50dp als Höhe, geben Sie einfach eine top_margin = "-50dp". Noch eine Sache, Sie können einfach centerInParent in den Marker Drawable setzen.

<ImageView 
    android:id="@+id/imvCurrentMarker" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_centerInParent="true" 
    android:src="@drawable/ic_a_marker" /> 

Ich hoffe, das hilft!

Verwandte Themen