marker.setIcon выдает java.lang.IllegalArgumentException: неуправляемый дескриптор

У меня возникли проблемы с изменением маркера googlemap на карте googlemap.

Ни один из этих способов не работает

MarkerOptions markerOptions = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(MarkerManager.getBitmapFromVectorDrawable(context, R.drawable.marker_no_issues)));
                    marker.setIcon(markerOptions.getIcon());

ни это

marker.setIcon(BitmapDescriptorFactory.fromBitmap(MarkerManager.getBitmapFromVectorDrawable(context, R.drawable.marker_no_issues)));

Метод getBitmapFromVectorDrawable:

public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
    Drawable drawable = AppCompatDrawableManager.get().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;
}

Что я делаю неправильно? Почему я не могу изменить значок маркера с помощью метода setIcon. Я также пробовал необработанные файлы .png и знаю, что вектор в растровое изображение работает хорошо.


person anduplats    schedule 21.05.2017    source источник
comment
Это дубликат неуправляемого дескриптора stackoverflow.com/questions/41902478/.   -  person CoolMind    schedule 18.12.2018


Ответы (2)


У меня была та же проблема, решенная следующим образом: перед установкой значка для объекта маркера просто проверьте, виден ли маркер на карте Google. Если вы очистили карту и установили значок для этого объекта маркера на карте, это приведет к этой ошибке

В этом случае просто создайте еще один новый объект вместо обновления того же объекта с помощью методов установки.

person Kaveri    schedule 07.06.2017
comment
Как мы можем проверить карту Google, если маркер все еще виден? У меня есть этот сбой и проблема с всплывающим фрагментом из заднего стека, и когда что снова обновить маркеры, происходит этот сбой. - person Mahdi; 29.11.2019

Как сказано в https://stackoverflow.com/a/42158729/2914140: "Старайтесь не setIcon() на старом маркере, вместо этого надуйте новый маркер, а затем используйте setIcon()".

В моем случае я попытался заменить растровые изображения выбранных и невыбранных маркеров при нажатии на них (см. https://stackoverflow.com/a/53829888/2914140). Вероятно, исключение возникло, когда предыдущий маркер был невидим, как сказал выше @Kaveri, я не знаю.

В настоящее время я получаю предыдущий маркер не с сохраненной ссылкой, а с настройкой снова.

private var selectedItem: StationClusterItem? = null

override fun onMapReady(googleMap: GoogleMap) {
    ...

    val clusterRenderer = MarkerClusterRenderer(context!!, googleMap, clusterManager!!,
        unselectedBitmap!!)
    clusterManager?.setOnClusterItemClickListener { item ->
        if (selectedItem != null) {
            // Set here a reference to a previous marker.
            // We save a reference to a previous item, not to a marker.
            val lastMarker = clusterRenderer.getMarker(selectedItem)
            lastMarker?.setIcon(unselectedBitmap)
        }
        selectedItem = item
        // Now get a reference to a selected marker.
        val newMarker = clusterRenderer.getMarker(item)
        newMarker?.setIcon(selectedBitmap)
        false
    }
}
person CoolMind    schedule 18.12.2018