标记。setIcon抛出java。lang.IllegalArgumentException:非托管描述符
我在谷歌地图上更改谷歌地图标记时遇到问题
这两种方法都不起作用
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文件,我知道矢量到位图效果很好
# 1 楼答案
我用同样的方法解决了这个问题,如下所示- 在设置标记对象的图标之前,只需检查标记在Google地图上是否仍然可见 如果已清除地图并将图标设置为地图上的此标记对象, 将导致此错误
在这种情况下,只需创建另一个新对象,而不是通过setter方法更新同一对象
# 2 楼答案
正如在https://stackoverflow.com/a/42158729/2914140中所说:“尽量不要
setIcon()
在旧的标记上,而是将新的标记充气,然后使用setIcon()
”在我的例子中,我试图在单击选定标记和未选定标记时替换它们的位图(请参见https://stackoverflow.com/a/53829888/2914140)。可能是以前的标记不可见时出现的例外,正如@Kaveri在上面所说的,我不知道
当前,我得到的上一个标记不是保存的引用,而是再次设置的