作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图在我的应用程序中添加对平板电脑的支持,但遇到了这行代码抛出的 IllegalArgumentException:
marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.arrow_green_10by19))
.fromResource 方法与图像文件 (png) 中的 R.drawable.arrow_green_10by19 一起工作正常,但是当 png 替换为矢量文件 arrow_green_10by19.xml(在 Android Studio IDE 中呈现良好)时,它会生成一个运行时如前所述。
有谁知道如何在 BitmapDescriptorFactory 中实现矢量资源并可以帮助我吗?
谢谢。
最佳答案
我遇到了同样的问题,但我意识到在我的 API 16 设备上它工作正常,但在 API 21 上它崩溃了。最后,它在使用 this solution 的两种设备中都有效。 .这里的代码:
@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;
}
还有这个:
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");
}
}
所以我以这种方式组合了这两个函数:
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;
}
其中 R.drawable.ic_place_24dp
是矢量资源 (.xml),而不是 .png
关于安卓谷歌地图标记 : Released unknown imageData reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33325728/
leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档: https://leafletjs.cn/reference.html 官网(英文): ht
我是一名优秀的程序员,十分优秀!