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)


Имах същия проблем, реших това по следния начин - преди да зададете иконата на маркерния обект, просто проверете дали маркерът все още се вижда в googlemap. Ако сте изчистили картата и сте задали иконата на този маркерен обект на картата, това ще доведе до тази грешка

В такъв случай просто създайте друг нов обект, вместо да актуализирате същия обект чрез методите на сетер

person Kaveri    schedule 07.06.2017
comment
Как можем да проверим картата на Google, ако маркерът все още се вижда? Имам този срив и проблем с изскачане на фрагмент от заден стек и кога какво да актуализирам отново Маркери се случва този срив. - person Mahdi; 29.11.2019

Къде разпределяте паметта за всеки не от списък? list е дефиниран като указател към масив от знаци, но указателят не сочи към нищо. Трябва да направите malloc или нещо подобно. Това, което бих направил, е да направя масив от знаци, наречен temp, в стека, който е достатъчно голям (може би 128 знака?) като char temp[128];, след това sprintf в temp и след това задайте list[i] = strdup(temp);
person CoolMind    schedule 18.12.2018