varios trazar tipos studio ruta marcadores mapas google example custom agregar android google-maps-markers google-maps-android-api-2 shapedrawable

trazar - Google Maps API v2 Android agrega forma dibujable como marcador



tipos de mapas android studio (3)

He estado tratando de agregar una forma dibujable como el icono de marcador para un marcador que quiero agregar en el mapa.

La forma se ve así (res / drawable / blue_circle.xml):

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <size android:width="15dp" android:height="15dp" /> <solid android:color="@color/Blue" /> </shape>

Y trato de agregar el marcador así:

markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.blue_circle));

Aparentemente obtengo una excepción NullPointer.

¿Debe el icono del marcador ser un mapa de bits? ¿Puedo agregar figuras dibujables como iconos de marcador? Y si es así, ¿qué estoy haciendo mal?


Aquí está una respuesta si está utilizando la biblioteca com.google.maps.android:android-maps-utils .

Crear un mapa de bits utilizando IconGenerator

IconGenerator iconGen = new IconGenerator(context); // Define the size you want from dimensions file int shapeSize = getResources().getDimensionPixelSize(R.dimen.shape_size); Drawable shapeDrawable = ResourcesCompat.getDrawable(getResources(), R.drawable.my_shape, null); iconGen.setBackground(shapeDrawable); // Create a view container to set the size View view = new View(context); view.setLayoutParams(new ViewGroup.LayoutParams(shapeSize, shapeSize)); iconGen.setContentView(view); // Create the bitmap Bitmap bitmap = iconGen.makeIcon();

Luego use el mapa de bits como lo haría al configurar el icono de marcador BitmapDescriptorFactory.fromBitmap(bitmap)


Cree un dibujo para su marcador (res / drawable / map_dot_red.xml):

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <gradient android:angle="90" android:endColor="#f58383" android:startColor="#ee6464" /> <stroke android:width="1dp" android:color="#a13939" /> </shape>

Crea un bitmap desde el dibujable:

int px = getResources().getDimensionPixelSize(R.dimen.map_dot_marker_size); mDotMarkerBitmap = Bitmap.createBitmap(px, px, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(mDotMarkerBitmap); Drawable shape = getResources().getDrawable(R.drawable.map_dot_red); shape.setBounds(0, 0, mDotMarkerBitmap.getWidth(), mDotMarkerBitmap.getHeight()); shape.draw(canvas);

Crea tu marcador, utilizando el mapa de bits:

Marker marker = mMap.addMarker(new MarkerOptions() .position(point) .anchor(.5f, .5f) .icon(BitmapDescriptorFactory.fromBitmap(mDotMarkerBitmap)));

Establezca el tamaño de su marcador en dimens (res / values ​​/ dimens.xml):

<resources> <dimen name="map_dot_marker_size">12dp</dimen> </resources>


Mi forma de lidiar con los dibujables de formas (xml) como iconos de marcadores (según la respuesta de saxman).

Tengo muchos objetos (marcadores) para mostrar en el mapa. Tienen ambos tipos de dibujo: mapa de bits y forma. El mismo icono que usé para múltiples marcadores. Por lo tanto, he agregado algo de caché para los descriptores de mapa de bits y la detección de tipos dibujables.

SparseArray<BitmapDescriptor> iconCache = new SparseArray<>(); for (MyObject object : objects) { int iconResId = object.icon; BitmapDescriptor icon = iconCache.get(iconResId); if (icon == null) { Drawable drawable; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { drawable = getResources().getDrawable(iconResId, null); } else { drawable = getResources().getDrawable(iconResId); } if (drawable instanceof GradientDrawable) { Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); drawable.draw(canvas); icon = BitmapDescriptorFactory.fromBitmap(bitmap); bitmap.recycle(); } else { icon = BitmapDescriptorFactory.fromResource(iconResId); } iconCache.put(iconResId, icon); map.addMarker(new MarkerOptions() .icon(icon) .position(position)); } }

Mi forma dibujable tiene un tamaño establecido, por lo tanto, puedo consultar el tamaño deseado para el mapa de bits.

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="12dp" android:height="12dp" /> <solid android:color="@color/transit_bus" /> </shape>