J'utilise cette partie de code pour ajouter un marqueur dans un MapFragment
dans Google Map version 2.
MarkerOptions op = new MarkerOptions();
op.position(point)
.title(Location_ArrayList.get(j).getCity_name())
.snippet(Location_ArrayList.get(j).getVenue_name())
.draggable(true);
m = map.addMarker(op);
markers.add(m);
Je veux utiliser différentes images de mon dessinable.
Voici comment vous pouvez définir un Drawable
comme un Marker
.
BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.current_position_tennis_ball)
MarkerOptions markerOptions = new MarkerOptions().position(latLng)
.title("Current Location")
.snippet("Thinking of finding some thing...")
.icon(icon);
mMarker = googleMap.addMarker(markerOptions);
VectorDrawables
et XML
basés Drawables
do pas fonctionnent avec cela.
La réponse de @Lukas Novak ne montre rien, car vous devez également définir les limites de Drawable
.
Ceci fonctionne pour tout dessinable. Voici un exemple parfaitement fonctionnel:
public void drawMarker() {
Drawable circleDrawable = getResources().getDrawable(R.drawable.circle_shape);
BitmapDescriptor markerIcon = getMarkerIconFromDrawable(circleDrawable);
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(41.906991, 12.453360))
.title("My Marker")
.icon(markerIcon)
);
}
private BitmapDescriptor getMarkerIconFromDrawable(Drawable drawable) {
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return BitmapDescriptorFactory.fromBitmap(bitmap);
}
circle_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="oval">
<size Android:width="20dp" Android:height="20dp"/>
<solid Android:color="#ff00ff"/>
</shape>
Si vous avez créé Drawable
par programme (vous n'avez donc aucune ressource), vous pouvez utiliser ceci:
Drawable d = ... // programatically create drawable
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
d.draw(canvas);
BitmapDescriptor bd = BitmapDescriptorFactory.fromBitmap(bitmap);
Ensuite, vous avez BitmapDescriptor
, que vous pouvez passer à MarkerOptions
.