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

我有一个Android应用程序自定义标记运行谷歌地图SDK。 一切工作正常我们的testing手机 – A7000,三星和其他。 但是,当我在Nexus 5或LG设备上运行应用程序时,一种自定义标记在地图上显示为白色。

虽然标记显示为白色,将执行所需的行为。

我们对此非常困惑,尤其是因为另一个自定义标记(非常相似)工作正常。 除了硬件之外,我们的testing手机和Nexus 5之间唯一的区别是Nexus运行的是Android 6.0,而我们的testing手机则运行的是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)); 

谷歌地图上显示像谷歌地图下面,一些标记变成白色,我使用循环来添加标记。

在这里输入图像说明

Solutions Collecting From Web of "自定义标记在某些设备上显示为白色(Google Maps v3 Android SDK)"

编辑:在6月13日发布的Google Play服务应用版本9.2.56中,该错误已得到修复。

我find了一个解决方法来解决你的问题,但是这很丑陋,可能不build议使用它,除非你知道要使用less量的标记。

而不是这个:

 //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与多个标记,所以解决方法是每次重新创build一个。 我认为BitmapDescriptorFactory.fromResource可能以某种方式caching读取资源,这就是为什么您需要将其解码为位图的原因。

这里是在链接安东尼奥10号回复的报价给了:

我们可以重新制作这个导致某些标记图标呈现为白色补丁的错误。 如果图标位图在多个标记之间共享,则您的应用程序可能会受到影响,但问题仅在特定使用情况下显示。

在短期内,我们build议#8中的解决方法 – 为每个标记使用一个唯一的Bitmap对象:

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

新的MarkerOptions()。icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.drawableid)));

创build一次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()使用默认图标时,解决方法不适用。