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.
Update Hallo zusammen, das Update auf Google play erlaubt jetzt flache Markierungen und Markierungsrotation, was genau das ist, was ich brauchte.
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);
}
}
});
}
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()));
}
}
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.
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ügenprivate 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));
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);
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();
}
}