Android Google Maps Marker:发布了未知的imageData参考

Wal*_*ada 5 svg android bitmapimage google-maps-markers xml-drawable

我正在尝试在我的应用中添加对平板电脑的支持,并遇到由此行代码抛出的IllegalArgumentException:

marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.arrow_green_10by19))
Run Code Online (Sandbox Code Playgroud)

方法.fromResource可以从图像文件(png)中使用R.drawable.arrow_green_10by19,但是当用矢量文件arrow_green_10by19.xml(在Android Studio IDE中渲染得很好)替换png时,它会生成如上所述的运行时.

有人知道如何在BitmapDescriptorFactory中实现矢量资源并可以帮助我吗?

谢谢.

Mig*_*cia 14

我有同样的问题,但我意识到在我的设备上使用API​​ 16它工作正常但是使用API​​ 21它会崩溃.最后,它适用于使用此解决方案的两种设备.这里的代码:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static Bitmap getBitmap(VectorDrawable vectorDrawable) {
    Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),
            vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    vectorDrawable.draw(canvas);
    return bitmap;
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

private static Bitmap getBitmap(Context context, int drawableId) {
    Drawable drawable = ContextCompat.getDrawable(context, drawableId);
    if (drawable instanceof BitmapDrawable) {
        return BitmapFactory.decodeResource(context.getResources(), drawableId);
    } else if (drawable instanceof VectorDrawable) {
        return getBitmap((VectorDrawable) drawable);
    } else {
        throw new IllegalArgumentException("unsupported drawable type");
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我用这种方式组合了这两个函数:

private Marker addMark(LatLng latLng, String title) {
    Bitmap bitmap = getBitmap(getContext(), R.drawable.ic_place_24dp);
    Marker marker = googleMap.addMarker(new MarkerOptions().position(latLng)
            .title(title)
            .icon(BitmapDescriptorFactory.fromBitmap(bitmap))
            .draggable(true));

    return marker;
}
Run Code Online (Sandbox Code Playgroud)

R.drawable.ic_place_24dp矢量资产(.xml)在哪里,而不是.png