Conversione di un disegno a una bitmap per modificare il colore di un segnalino in Android API v2 di Google Maps

Sto convertendo una vecchia applicazione da v1 a v2, e sto avendo un problema con il colore delle mie icone del Marker. Ho un'icona di base, bianca e devo essere colorata.

In v1, l'ho fatto in questo modo:

  • Come installare l'applicazione due volte senza interferenze in android?
  • Ricevitore di trasmissione non funziona in ICS se l'applicazione non è stata avviata alless una volta
  • AnimationDrawable non funziona in Android 2.2
  • lo schermo diventa bianco prima di schizzi in android
  • Imansible initilizzare la libreria di rendering OpenGL
  • Punti di interruzione nella sorgente della piattaforma Android
  • Drawable d = DrawableUtils.resizeImageToDrawable( MapViewFragment.mapviewActivity, Configuration.Display.getDrawableFix(i), Configuration.MapView.getWaypointIconWidth(), Configuration.MapView.getWaypointIconHeight()); d.setColorFilter(color, Mode.MULTIPLY); overlay = new MyFplnFixListItimizedOverlay(d); 

    Poiché i v2 Markers non accettano Drawables per le loro icone, ho pensato di convertire il Drawable in un bitmap, come questo:

     Drawable d = DrawableUtils.resizeImageToDrawable( MapViewFragment.mapviewActivity, Configuration.Display.getDrawableFix(i), Configuration.MapView.getWaypointIconWidth(), Configuration.MapView.getWaypointIconHeight()); d.setColorFilter(color, Mode.MULTIPLY); Bitmap icon = ((BitmapDrawable) d).getBitmap(); Marker marker = MapViewFragment.map.addMarker(new MarkerOptions() .position(point) .title(Integer.toString(fplnType)) .visible(true) .icon(BitmapDescriptorFactory.fromBitmap(icon))); 

    Ma per qualche motivo, non funziona. Le icone rimangono bianche. Qualcuno sa perché?

    Grazie in anticipo.

  • priorità in un ricevitore broadcast per ricevere chiamate
  • Fuori memory in un'assegnazione di byte (bitmap come String al webservice usando il soap)
  • Android Volley Restituisce i risultati due volte per una richiesta
  • Il gioco Android continua ad essere aggredito
  • Come posso modificare l'image di un ImageView?
  • Non c'è spazio sul dispositivo - android
  • 3 Solutions collect form web for “Conversione di un disegno a una bitmap per modificare il colore di un segnalino in Android API v2 di Google Maps”

    Okay, ecco come l'ho fatto alla fine della giornata:

     Drawable d = DrawableUtils.resizeImageToDrawable( MapViewFragment.mapViewActivity, Configuration.Display.getDrawableFix(i), Configuration.MapView.getWaypointIconWidth(), Configuration.MapView.getWaypointIconHeight()); d.setColorFilter(color, Mode.MULTIPLY); Bitmap b = ((BitmapDrawable) d).getBitmap(); Canvas myCanvas = new Canvas(b); int myColor = b.getPixel(0,0); ColorFilter filter = new LightingColorFilter(myColor, color); Paint pnt = new Paint(); pnt.setColorFilter(filter); myCanvas.drawBitmap(b,0,0,pnt); Marker marker = MapViewFragment.map.addMarker(new MarkerOptions() .position(point) .title(Integer.toString(fplnType)) .visible(true) .icon(BitmapDescriptorFactory.fromBitmap(b))); 

    Se il tuo disegno non è definito in un XML, puoi farlo con questo metodo:

     protected Bitmap fromDrawable(final Drawable drawable, final int height, final int width) { final int widthDip = (int) TypedValue.applyDimension(1, width, getResources() .getDisplayMetrics()); final int heightDip = (int) TypedValue.applyDimension(1, width, getResources().getDisplayMetrics()); final Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } 

    Si noti che se è necessario farlo da OUTSIDE un'attività, è necessario anche passare un Context (per call context.getResources().getDisplayMetrics() ). È inoltre ansible passare l'object DisplayMetrics .

    Non sono sicuro di cosa questo DrawableUtils sta facendo, ma tu lo stai passando a un BitmapDrawable. È davvero un BitmapDrawable?

    ecco un codice per estrarre un Bitmap da qualsiasi tipo di disegni:

     Drawable d = // make sure it's not null d.setBounds(0, 0, width, height); Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); d.draw(c); 

    l'idea è che tu crei una canvas su una bitmap mutevole e disegna quel disegni sulla canvas

    edit:

    Ho appena visto la risposta @Analizer e sì, la mia risposta è buona se non hai il Disco come una risorsa. Ma se lo fai, l'utente invece la sua risposta.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.