android - Как добавить Placemark в yandexmapkit используя в качестве ресурса изображения vector drawable?


0

Всем добрый день, использую yandex mapkit 3.0, пытаюсь добавить vector drawable иконку

mapView.getMap().getMapObjects().addPlacemark(new Point(geoPosition.getLatitude(), geoPosition.getLongitude()), ImageProvider.fromResource(this, R.drawable.ic_geolocation));

Изображение не отображается, если использовать в качестве иконки png, тогда всё хорошо

mapView.getMap().getMapObjects().addPlacemark(new Point(geoPosition.getLatitude(), geoPosition.getLongitude()), ImageProvider.fromResource(this, R.drawable.somePng));

mapkit от яндекса не поддерживает такой вариант изображений для меток? LogCat при этом не выдаёт каких либо ошибок

Источник
  •  61
  •  1
  • 16 янв 2018 2018-01-16 08:27:05

1 ответ

1

Технические вопросы

Можно ли использовать векторные изображения в качестве маркеров в MapKit?

Векторные изображения не поддерживаются.


Но и bitmap хватит сполна:

ImageProvider.fromBitmap()

:

public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
    Drawable drawable = ContextCompat.getDrawable(context, drawableId);

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        drawable = (DrawableCompat.wrap(drawable)).mutate();
    }

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
            drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

:

fun Context.getBitmapFromVectorDrawable(drawableId: Int): Bitmap? {
    var drawable = ContextCompat.getDrawable(this, drawableId) ?: return null

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        drawable = DrawableCompat.wrap(drawable).mutate()
    }

    val bitmap = Bitmap.createBitmap(
            drawable.intrinsicWidth,
            drawable.intrinsicHeight,
            Bitmap.Config.ARGB_8888) ?: return null
    val canvas = Canvas(bitmap)
    drawable.setBounds(0, 0, canvas.width, canvas.height)
    drawable.draw(canvas)

    return bitmap
}

val bitmap = this.getBitmapFromVectorDrawable(R.drawable.ic_24dp)
userLocationView.pin.setIcon(ImageProvider.fromBitmap(bitmap))
  • 18 янв 2018 2018-01-18 14:34:55