2016-05-16 15 views
9

Ho installato Google Maps SDK con indicatori personalizzati su un'app per Android. Tutto funziona perfettamente con i nostri telefoni di prova: un A7000, un Samsung e altro. Tuttavia, quando eseguo l'app su dispositivi Nexus 5 o LG, un tipo di indicatore personalizzato che mostra il bianco sulla mappa.Indicatori personalizzati che mostrano con il colore bianco su alcuni dispositivi (Google Maps v3 Android SDK)

Mentre i marcatori sono bianchi, eseguirà il comportamento desiderato.

Siamo molto confusi su questo, soprattutto perché un altro marcatore personalizzato (che è molto simile) funziona bene. Oltre all'hardware, l'unica altra differenza tra i nostri telefoni di prova e il Nexus 5 è che il Nexus esegue Android 6.0, 5.xe 4.x per i nostri telefoni di prova.

codice utilizzando aggiungere marcatore

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))); 
} 

per cambiare l'icona marcatore utilizzando

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

su Nexus dispositivo google map apparire come qui di seguito, alcuni fuori i marcatori diventano bianche, sto usando loop aggiungi marcatori.

enter image description here

+1

Dai un'occhiata a https://github.com/googlemaps/android-maps-utils/issues/276 – antonio

+0

grazie @antonio, c'è qualche soluzione? –

+2

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

risposta

5

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().

Problemi correlati