EDIT: Con la versione 9.2.56 dell'app Google Play Services rilasciato il 13 giugno, il bug è stato corretto.
Ho trovato una soluzione al problema, tuttavia è piuttosto brutto e probabilmente non è consigliabile utilizzarlo a meno che non si sappia che si userà un piccolo numero di marker.
Invece di questo:
//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));
fare questo:
//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)));
Soluzione trovato dopo aver letto questo link (grazie @antonio nei vostri commenti): https://code.google.com/p/gmaps-api-issues/issues/detail?id=9765
Il bug è causato su alcuni dispositivi con una versione recente della libreria dei servizi di Google Play (probabilmente 8.7+ o 9+).
Succede se si condivide un BitmapDescriptor con più marcatori, quindi la soluzione è ricrearne uno ogni volta. Penso che BitmapDescriptorFactory.fromResource
potrebbe in qualche modo memorizzare le risorse di lettura, ecco perché è necessario decodificarlo come bitmap.
Ecco la citazione della risposta # 10 del transbao al link antonio ha dato:
Possiamo repro questo bug che causa alcune icone marcatori per rendere come macchie bianche. La tua app potrebbe risentirne se una bitmap dell'icona viene condivisa tra più marker, , sebbene il problema si manifesti solo in specifici scenari di utilizzo .
Nel breve periodo, vi consigliamo la soluzione a # 8 - utilizzare un oggetto Bitmap unico per ogni marcatore:
marker.setIcon (BitmapDescriptorFactory.fromBitmap ( BitmapFactory.decodeResource (getResources(), R.drawable.drawableid)));
e
nuovi MarkerOptions icona() (BitmapDescriptorFactory.fromBitmap ( BitmapFactory.decodeResource (getResources(), R.drawable.drawableid))).;
Creazione di un BitmapDescriptor una volta e riutilizzarlo non sarà sufficiente. E.g. se stai facendo:
BitmapDescriptor bd = ...; marker1.setIcon (bd); marker2.setIcon (bd);
... allora la soluzione potrebbe essere:
marker1.setIcon (BitmapDescriptorFactory.fromBitmap ( BitmapFactory.decodeResource (getResources(), R.drawable.drawableid))); marker2.setIcon (BitmapDescriptorFactory.fromBitmap ( BitmapFactory.decodeResource (getResources(), R.drawable.drawableid)));
Si noti che, se l'app utilizza molti indicatori, questa soluzione alternativa potrebbe comportare un maggiore consumo di memoria. Inoltre, sfortunatamente la soluzione alternativa non si applica quando l'icona predefinita è utilizzata tramite BitmapDescriptorFactory.defaultMarker().
Dai un'occhiata a https://github.com/googlemaps/android-maps-utils/issues/276 – antonio
grazie @antonio, c'è qualche soluzione? –
Attualmente non esiste una soluzione (esiste un problema aperto https://code.google.com/p/gmaps-api-issues/issues/detail?id=9765). Non ho trovato alcuna soluzione o – antonio