2015-11-27 13 views
5

Se ho una vista con uno sfondo trasparente e faccio bitmap = view.getDrawingCache();, quella bitmap è sfortunatamente non più trasparente. Uno sfondo nero è impostato sullo sfondo.Come rendere view.getDrawingCache() preservando la trasparenza

Ho anche provato

view.setDrawingCacheBackgroundColor(Color.TRANSPARENT);

senza successo.

In realtà questo metodo permette di impostare il colore di sfondo, senza alcun supporto alfa, Color.TRANSPARENT quali è 0x00000000 in realtà è nero se non vi interessa circa la parte alpha ... Se uso Color.RED, lo sfondo è davvero molto rosso.

Qualche idea per farlo funzionare? Si tratta di una limitazione dell'API Android corrente? Posso usare draw() invece? ma è meno performante che questo view.getDrawingCache() suppongo (senza cache)?

Grazie

+1

Hai trovato una soluzione? – Antzi

+0

Ho esattamente lo stesso problema – takluiper

risposta

0

Draw caching è un po 'di una reliquia di pre-HW-accelerato Android, quindi alcune cose potrebbe essere un po' di confusione/non come ben documentato.

La trasparenza dovrebbe funzionare bene fino a quando non si preme View#setDrawingCacheBackgroundColor(int) in quanto ciò potrebbe causare il calo della cache a 16 bit dello spazio colore (vedere View#mDrawingCacheBackgroundColor).

Questo codice

view.setDrawingCacheEnabled(true); 
// wait for first layout 
... 
Bitmap b = view.getDrawingCache(); 

dovrebbe darvi una bitmap ARGB_8888 con sfondo trasparente. (È possibile anche questo nel debugger Studio android da impostazioni di un punto di interruzione dopo la chiamata get e 'View Bitmap' sulla variabile.

0

Prova questo codice dopo l'impostazione del colore di sfondo il layout trasparente in file XML

  layout.setDrawingCacheEnabled(true); 
      Bitmap bmp = layout.getDrawingCache(); 
      File mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "smiley1.png"); 
      FileOutputStream outStream; 
      outStream = new FileOutputStream(mFile); 
      bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
Problemi correlati