gpt4 book ai didi

android - 自定义标记在某些设备上显示为白色(Google Maps v3 Android SDK)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:06 25 4
gpt4 key购买 nike

我在 Android 应用程序上使用自定义标记运行 Google Maps SDK。在我们的测试手机上一切正常——A7000、三星和其他手机。但是,当我在 Nexus 5 或 LG 设备上运行该应用程序时,一种类型的自定义标记在 map 上显示为白色。

当标记显示为白色时,将执行所需的行为。

我们对此非常困惑,尤其是因为另一个自定义标记(非常相似)工作正常。除了硬件之外,我们的测试手机与 Nexus 5 之间的唯一区别是 Nexus 运行的是 Android 6.0,而我们的测试手机运行的是 5.x 和 4.x。

用于添加标记的代码

for(i=0;i<latLngs.size;i++)
{
LatLng latLng=latLngs.get(i);
Marker m = mMap.addMarker(new MarkerOptions().position(latLng).title("Title").icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));
}

用于更改标记图标使用

 m.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.marker1));

在 Nexus 设备上,谷歌地图如下所示,一些标记变为白色,我正在使用循环添加标记。

enter image description here

最佳答案

编辑:随着 6 月 13 日发布的 Google Play Services 应用的 9.2.56 版,该错误已得到修复。

我找到了解决您的问题的方法,但是它非常难看,除非您知道要使用少量标记,否则不建议使用它。

取而代之的是:

//Getting a reference to your activity's resources
final Resources resources = myActivity.getResources();
//Defining your drawable res id
final int resId = R.drawable.my_drawable_res_id;
marker.setIcon(BitmapDescriptorFactory.fromResource(resId));

这样做:

//Getting a reference to your activity's resources
final Resources resources = myActivity.getResources();
//Defining your drawable res id
final int resId = R.drawable.my_drawable_res_id;
marker.setIcon(
BitmapDescriptorFactory.fromBitmap(
BitmapFactory.decodeResource(resources, resId)));

阅读此链接后找到的解决方法(感谢@antonio 的评论): https://code.google.com/p/gmaps-api-issues/issues/detail?id=9765

该错误是在装有最新版本的 Google Play 服务库(可能是 8.7+ 或 9+)的某些设备上引起的。

如果您与多个标记共享一个 BitmapDescriptor,就会发生这种情况,因此解决方法是每次都重新创建一个。我认为 BitmapDescriptorFactory.fromResource 可能会以某种方式缓存读取的资源,这就是您需要将其解码为位图的原因。

这里引用了 transbao 在 antonio 给出的链接中的第 10 条回复:

We can repro this bug which causes certain marker icons to render as white patches. Your app may be affected if an icon bitmap is shared among multiple markers, although the issue only manifests in specific usage scenarios.

In the short term, we'd recommend the workaround in #8 -- use a unique Bitmap object for each marker:

marker.setIcon(BitmapDescriptorFactory.fromBitmap( BitmapFactory.decodeResource(getResources(), R.drawable.drawableid)));

and

new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap( BitmapFactory.decodeResource(getResources(), R.drawable.drawableid)));

Creating a BitmapDescriptor once and reusing it won’t be sufficient. E.g. if you’re doing:

BitmapDescriptor bd = ...; marker1.setIcon(bd); marker2.setIcon(bd);

...then the workaround would be:

marker1.setIcon(BitmapDescriptorFactory.fromBitmap( BitmapFactory.decodeResource(getResources(), R.drawable.drawableid))); marker2.setIcon(BitmapDescriptorFactory.fromBitmap( BitmapFactory.decodeResource(getResources(), R.drawable.drawableid)));

Please note that, if your app uses a lot of markers, this workaround could possibly result in higher memory consumption. Also, unfortunately the workaround doesn’t apply when the default icon is used via BitmapDescriptorFactory.defaultMarker().

关于android - 自定义标记在某些设备上显示为白色(Google Maps v3 Android SDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com