android - 带有矢量 Assets 图标的 android 谷歌地图中的自定义标记

标签 android google-maps-markers google-maps-android-api-2

我们如何用矢量 Assets 文件实现 map 标记图标,谷歌以编程方式显示它的方式:

map

更新:

map.addMarker(new MarkerOptions()
    .position(latLng)
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.your_vector_asset))
    .title(title);

这在处理矢量 Assets 时不起作用。问这个问题的主要原因。上面代码的错误:

java.lang.IllegalArgumentException: Failed to decode image. The provided image must be a Bitmap.

最佳答案

你可以使用这个方法:

private BitmapDescriptor bitmapDescriptorFromVector(Context context, int vectorResId) {
        Drawable vectorDrawable = ContextCompat.getDrawable(context, vectorResId);
        vectorDrawable.setBounds(0, 0, vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight());
        Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        vectorDrawable.draw(canvas);
        return BitmapDescriptorFactory.fromBitmap(bitmap);
}

所以您的代码将如下所示:

map.addMarker(new MarkerOptions()
                .position(latLng)
                .icon(bitmapDescriptorFromVector(getActivity(), R.drawable.your_vector_asset))
                .title(title);

编辑:
在 Kotlin 中它可能看起来像:

private fun bitmapDescriptorFromVector(context: Context, vectorResId: Int): BitmapDescriptor? {
        return ContextCompat.getDrawable(context, vectorResId)?.run {
            setBounds(0, 0, intrinsicWidth, intrinsicHeight)
            val bitmap = Bitmap.createBitmap(intrinsicWidth, intrinsicHeight, Bitmap.Config.ARGB_8888)
            draw(Canvas(bitmap))
            BitmapDescriptorFactory.fromBitmap(bitmap)
        }
    }

关于android - 带有矢量 Assets 图标的 android 谷歌地图中的自定义标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42365658/

相关文章:

Android-sdk 管理器未显示所有包

android - 这个 R.id.home 是什么?

android billing v3 - onActivityResult 未被调用

ios - 像 UBER 一样在 Google map 上移动 GMSMarker

javascript - 使用 gomap-plugin 隐藏/查看一组标记

android - 缺少主调度程序的模块

android - map V2 标记按下状态

java - 如何使用 FusedLocationProviderClient 在 GoogleMap 中获取当前位置

android - 适用于 Android 的谷歌地图渐变多段线?

javascript - MarkerWithLabel.js - labelText 没有为标记标签创建文本?