Uso de un diseño xml para un Google Map Marker para Android
Quiero usar un diseño y no un dibujo para mimarker
Estoy usando Google Maps Api 2 para una aplicación de Android.
Me gusta esto:
Marker m = googleMap
.addMarker(new MarkerOptions()
.position(LOC)
.snippet(user)
.title(name)
.icon(BitmapDescriptorFactory.fromResource(R.layout.map_marker)));
Sin embargo, parece que esto solo está diseñado para su uso desdedrawable
carpeta.
Simplemente, qué imagen con un fondo donde puedo cambiar los colores según el tipo de marcador. Este es el diseño que quiero usar:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#222"
android:id="@+id/llMarker">
<ImageView
android:id="@+id/ivMarker"
android:layout_marginTop="5dp"
android:layout_width="40dp"
android:layout_height="40dp" />
</LinearLayout>
Bastante básico ¿Cómo puedo usar esto como marcador? (¿o al menos replicar el resultado final al que me dirijo?)
Los documentos dicen que puedes usar esto:
fromResource (int resourceId)
Entonces asumí que un diseño podría funcionar.
ACTUALIZAR:
He tomado el concepto de la respuesta a continuación y revisé algunas cosas; esto todavía no está funcionando; sin errores. Simplemente no se mostrará la imagen.
LayoutInflater inflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.map_marker, null);
m = googleMap
.addMarker(new MarkerOptions()
.position(LOC)
.snippet(user)
.title(name)
.icon(BitmapDescriptorFactory.fromBitmap(loadBitmapFromView(v))));
// método
public static Bitmap loadBitmapFromView(View v) {
if (v.getMeasuredHeight() <= 0) {
v.measure(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.draw(c);
return b;
}
return null;
}