在某些设备上显示带有白色的自定义标记(Google Maps v3 Android SDK)

时间:2016-05-16 10:44:55

标签: android google-maps dictionary google-maps-api-3

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

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

我们对此非常困惑,特别是因为另一个自定义标记(非常相似)工作正常。除硬件外,我们的测试手机和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

1 个答案:

答案 0 :(得分:5)

编辑:随着6月13日发布的Google Play服务应用版本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回复的引用:

  

我们可以重现这个导致某些标记图标呈现为的错误   白斑。如果共享图标位图,您的应用可能会受到影响   在多个标记之间,虽然问题仅在具体表现   使用场景。

     

在短期内,我们建议在#8中使用解决方法 - 使用唯一的   每个标记的位图对象:

     

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

     

     

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

     

创建一次BitmapDescriptor并重复使用它是不够的。   例如。如果你在做:

     

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

     

...然后解决方法是:

     

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

     

请注意,如果您的应用使用了大量标记,则此解决方法   可能会导致更高的内存消耗。也,   遗憾的是,当默认图标为时,解决方法不适用   通过BitmapDescriptorFactory.defaultMarker()使用。