我在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设备上谷歌地图如下所示,一些标记变为白色,我使用循环添加标记。
答案 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()使用。