2012-01-05 9 views
5

Ho un problema. Ho bisogno di unire due immagini di dimensioni diverse (drawable). L'idea è di avere un'immagine di qualcuno (caricata dinamicamente) che sia 100x100px e che abbia uno sfondo trasparente più grande (ad esempio 100x120). In questi ultimi 20 pixel ho una freccia che dovrebbe indicare la posizione di una persona su una mappa. Poi penso che avrei potuto fare qualcosa di simile:Mappe: unione di più drawable di dimensioni diverse

Drawable[] layers = new Drawable[2]; 
layers[0] = res.getDrawable(R.drawable.background_img); 
layers[1] = res.getDrawable(R.drawable.icon); 
LayerDrawable layerDrawable = new LayerDrawable(layers); 

Ma questo Sovrapposizioni semplicemente un'immagine su un altro ignorando i loro limiti.

Grazie in anticipo, Vaidas

- UPDATE: finalmente risolto il problema. Funziona come un fascino :)

private Drawable createPersonDrawable(Bitmap personImage) 
{ 
    Bitmap resultingBitmap = Bitmap.createBitmap(drawableWidth, 
      drawableHeight, Bitmap.Config.ARGB_8888); 
    Canvas comboCanvas = new Canvas(resultingBitmap); 

    comboCanvas.drawBitmap(personImage, 0, 0, null); 

    // Get the bottom part of the image from resources 
    Bitmap bottomPart = BitmapFactory.decodeResource(getResources(), 
      R.drawable.person_map_icon_bottom); 

    comboCanvas.drawBitmap(bottomPart, 0, drawablePersonImageHeight, null); 
    comboCanvas.save(); 

    return new BitmapDrawable(resultingBitmap); 
} 

ho trovato la descrizione qui: http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas

risposta

1

Non ho i comandi esatti qui, ma si dovrebbe fare:

  1. creare una bitmap con il totale taglia che vuoi
  2. Creare una tela passando la bitmap creata
  3. Disegnare le due immagini sulla tela.
  4. Aggiungere la bitmap alla vista che si sta utilizzando.
+0

Grazie. Proverò a postare i risultati. –

1

se si desidera modificare le dimensioni e la posizione Drawable a LayerDrawable, è possibile utilizzare per modificare le dimensioni setLayerSize drawable, ed è possibile utilizzare setLayerInset per controllare la posizione.