2015-11-27 13 views
5

Wenn ich eine Ansicht mit einem transparenten Hintergrund habe und ich mache bitmap = view.getDrawingCache();, ist diese Bitmap leider nicht mehr transparent. Ein schwarzer Hintergrund ist im Hintergrund eingestellt.Wie man view.getDrawingCache() Transparenz beibehalten

Ich habe sogar versucht,

view.setDrawingCacheBackgroundColor(Color.TRANSPARENT);

ohne Erfolg.

Eigentlich ist diese Methode, um die Hintergrundfarbe ohne Alpha-Unterstützung festlegen können, Color.TRANSPARENT das ist 0x00000000 tatsächlich schwarz ist, wenn Sie nicht über die Alpha Teil ist es egal ... Wenn ich Color.RED verwenden, ist der Hintergrund in der Tat sehr rot.

Haben Sie eine Idee, damit das funktioniert? Ist das eine Einschränkung der aktuellen Android API? Kann ich stattdessen draw() verwenden? aber es ist weniger performant, dass diese view.getDrawingCache() ich nehme (kein Cache)?

Dank

+1

Haben Sie eine Lösung gefunden? – Antzi

+0

Ich habe genau das gleiche Problem – takluiper

Antwort

0

Draw-Caching ist so etwas wie ein Relikt der Pre-HW-beschleunigte Android, so dass einige Dinge vielleicht ein wenig verwirrend/nicht so gut dokumentiert sein.

Die Transparenz sollte gut funktionieren, solange Sie View#setDrawingCacheBackgroundColor(int) weglassen, da dies dazu führen kann, dass der Cache auf 16 Bit Farbraum reduziert wird (siehe View#mDrawingCacheBackgroundColor).

Dieser Code

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

sollten Sie eine ARGB_8888 Bitmap mit transparentem Hintergrund geben. (Sie können dies auch im Android Studio-Debugger von Einstellungen ein Haltepunkt nach dem get Anruf und ‚Ansicht Bitmap‘ auf der Variable.

0

diesen Code Versuchen Sie nach der Layout Hintergrundfarbe transparent in XML-Datei Einstellung

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