webentwicklung-frage-antwort-db.com.de

Android Maps API v2 Symbol "Mein Standort" ändern

Ich möchte das Standardsymbol, das Android Maps V2 für "Mein Standort" (Der kleine blaue Punkt/Pfeil) verwendet, durch mein eigenes Bild ersetzen. Ich habe meine eigene Kachel provider erstellt, die ein paar Karten enthält, die überwiegend blau sind. Daher ist das Standard-Symbol "Mein Standort" sehr schwer zu erkennen. Früher hätte ich nur die draw-Methode der MyLocationOverlay überschrieben, aber in der neuen API scheint es keine zu geben. Jede Hilfe wäre toll!

BEARBEITEN: Ich brauche auch das Symbol, um sich drehen zu können, genauso wie der Pfeil dies tut, je nachdem, in welche Richtung Sie schauen. Ich kann also nicht einfach eine normale marker :( verwenden. Grundsätzlich muss ich nur ein benutzerdefiniertes Bild für diesen Pfeil erstellen.

enter image description here

Update Hallo zusammen, das Update auf Google play erlaubt jetzt flache Markierungen und Markierungsrotation, was genau das ist, was ich brauchte.

22
Gyroscope

Mit dem neuesten Update für die Google Play Services können Sie jetzt "Flat" -Marker verwenden und diese drehen, was genau das ist, was ich brauchte. Hier ist eine einfache Version meiner Implementierung. Es gibt wahrscheinlich einiges, was ich tun kann, um die Animation zu optimieren und zu optimieren, aber das erledigt den Moment. Jede Rückmeldung ist willkommen.

Marker mPositionMarker;
GoogleMap mMap;

@Override
public void onLocationChanged(Location location) {

    if (location == null)
        return;

    if (mPositionMarker == null) {

        mPositionMarker = mMap.addMarker(new MarkerOptions()
                .flat(true)
                .icon(BitmapDescriptorFactory
                        .fromResource(R.drawable.positionIndicator))
                .anchor(0.5f, 0.5f)
                .position(
                        new LatLng(location.getLatitude(), location
                                .getLongitude())));
    }

    animateMarker(mPositionMarker, location); // Helper method for smooth
                                                // animation

    mMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(location
            .getLatitude(), location.getLongitude())));

}

public void animateMarker(final Marker marker, final Location location) {
    final Handler handler = new Handler();
    final long start = SystemClock.uptimeMillis();
    final LatLng startLatLng = marker.getPosition();
    final double startRotation = marker.getRotation();
    final long duration = 500;

    final Interpolator interpolator = new LinearInterpolator();

    handler.post(new Runnable() {
        @Override
        public void run() {
            long elapsed = SystemClock.uptimeMillis() - start;
            float t = interpolator.getInterpolation((float) elapsed
                    / duration);

            double lng = t * location.getLongitude() + (1 - t)
                    * startLatLng.longitude;
            double lat = t * location.getLatitude() + (1 - t)
                    * startLatLng.latitude;

            float rotation = (float) (t * location.getBearing() + (1 - t)
                    * startRotation);

            marker.setPosition(new LatLng(lat, lng));
            marker.setRotation(rotation);

            if (t < 1.0) {
                // Post again 16ms later.
                handler.postDelayed(this, 16);
            }
        }
    });
}
21
Gyroscope

meine einfache Lösung ist, einfach "Mein Standort" der Google-Karte zu deaktivieren

und erstellen Sie ImageView auf der Karte mit meinem Symbol und nehmen Sie dann ImageView mit auf

onClick und getMyLocation, animateCamera in onClick

 this.mGoogleMap.getUiSettings().setMyLocationButtonEnabled(false);
 this.mGoogleMap.setMyLocationEnabled(true);

.

@Override
public void onClick(final View v) {

    Location location = this.mGoogleMap.getMyLocation();

        if (location != null) {

            LatLng target = new LatLng(location.getLatitude(), location.getLongitude());
            CameraPosition position = this.mGoogleMap.getCameraPosition();

            Builder builder = new CameraPosition.Builder();
            builder.zoom(15);
            builder.target(target);

            this.mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(builder.build()));

          }    
}
27
Intathep

Ab dem 3.1.36 kann das Symbol nicht geändert werden (ich denke, es wird sich in der Zukunft ändern, aber wenn man sich die Geschwindigkeit der Implementierung von Verbesserungen für API v2 ansieht, wird es nicht vor Weihnachten sein).

Sie können jedoch jetzt eine Markierung verwenden, da sie die Funktion setIcon hat.

Grundsätzlich müssen Sie GoogleMap.setMyLocationEnabled vergessen, da es immer oben angezeigt wird. Sie erstellen stattdessen Ihre eigene LocationClient und verwenden lat, long und Peilung aus Location, um die Marker zu aktualisieren. Fügen Sie außerdem eine Circle hinzu und verwenden Sie die Genauigkeit, um einen ähnlichen Effekt wie die standardmäßige myLocation-Visualisierung zu erzielen.

4
MaciejGórski

Sie können das Klickereignis der Schaltfläche "MyLocation" in Google Maps nicht verarbeiten, aber es gibt einen Trick, mit dem Sie ein Verhalten gemäß Ihren Anforderungen erzielen können:
Fügen Sie zuerst in Ihrer layout.xml-Datei eine Karte und eine MyLocation-Dummy-Schaltfläche hinzu.
Dies können Sie mit Hilfe des relativen Layouts erreichen:

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

    <fragment
        Android:id="@+id/map"
        Android:name="com.google.Android.gms.maps.SupportMapFragment"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />

    <Button
        Android:id="@+id/myLocationButton"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentRight="true"
        Android:layout_marginRight="10dp"
        Android:layout_marginTop="10dp"
        Android:background="@drawable/mylocation" />
</RelativeLayout>


Sie können "mylocation.png" nehmen, wie Sie es auf der Google-Karte sehen.
LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

    Criteria criteria = new Criteria();
    String s = locationManager.getBestProvider(criteria, false);

    Location location = locationManager.getLastKnownLocation(s);  

Rufen Sie das click-Ereignis Ihrer MyLocation-Dummy-Schaltfläche auf, in der Sie eine Markierung hinzufügen
private GoogleMap googleMap; googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); googleMap.addMarker(new MarkerOptions().icon(YOUR_MODIFIED_ICON).position(latLng).title(TITLE).snippet(SNIPET));
Auf diese Weise können Sie das Standardsymbol von Google Map ändern.
Ja, Sie müssen auch die Zoomstufe einstellen:
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

1

Hier ist der Code für den Zugriff auf den Standort-Button:

View mv=findViewById(R.id.map);
        View locationButton = ((View) mv.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
        RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams();
// position on right bottom
        rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
        rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
        rlp.setMargins(0, 180, 180, 0);
0
user342498

versuche dies; Ich benutze dies, um eine Route auf der Karte zu zeichnen, aber ich setze Symbole für die Marker und für meinen Standort Deklariere dies, um deinen Standort anzuzeigen:

    LocationManager locationManager = (LocationManager) 
    getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);
    Location myLocation= locationManager.getLastKnownLocation(provider);

    longitude = myLocation.getLongitude();
    latitude  = myLocation.getLatitude();
    fromPosition = new LatLng(latitude, longitude);

Erstellen Sie eine Funktion wie diese, die ich zum Zeichnen auf der Karte verwendet habe, aber ich setze Symbole auf die Markierungen und meine Position:

mGoogleMap.clear();
if(response.equalsIgnoreCase("Success"))
{
     ArrayList<LatLng> directionPoint = v2GetRouteDirection.getDirection(document);
     PolylineOptions rectLine = new PolylineOptions().width(7).color(Color.BLUE);

     for (int i = 0; i < directionPoint.size(); i++) {
     rectLine.add(directionPoint.get(i));
     }
     // Adding route on the map
     mGoogleMap.setOnMarkerClickListener(MainActivity.this);
     mGoogleMap.addPolyline(rectLine);
     markerOptions.position(fromPosition);
     markerOptions.draggable(true);
     Marker1 = mGoogleMap.addMarker(new MarkerOptions()
               .position(Estadio)
               .title("Estadio Cuscatlan")
               .snippet("Estadio Cuscatlan")                                                    
               .icon(BitmapDescriptorFactory                                          
               .fromResource(R.drawable.mapmarker))); 
     Marker2 = mGoogleMap.addMarker(new MarkerOptions()
               .position(Metrocentro)
           .title("Metrocentro")
           .snippet("Metrosuelo")
           .icon(BitmapDescriptorFactory
           .fromResource(R.drawable.mapmark
      Marker3 = mGoogleMap.addMarker(new MarkerOptions()
            .position(Mejicanos)
            .title("Mejicanos")
            .snippet("Mejicanos")
            .icon(BitmapDescriptorFactory
            .fromResource(R.drawable.mapmarker)));  
      MarkerMe = mGoogleMap.addMarker(new MarkerOptions()                                             
                        .position(fromPosition) 
                        .icon(BitmapDescriptorFactory
                        .fromResource(R.drawable.car64)));
   }
    Dialog.dismiss();
    } 
} 
0
José De la O