2015-11-27 3 views
5

Если у меня есть вид с прозрачным фоном, и я делаю bitmap = view.getDrawingCache();, это растровое изображение, к сожалению, не более прозрачно. В фоновом режиме установлен черный фон.Как сделать view.getDrawingCache() сохранение прозрачности

Я даже попытался

view.setDrawingCacheBackgroundColor(Color.TRANSPARENT);

без успеха.

На самом деле этот метод позволяет установить цвет фона без альфа-поддержки, Color.TRANSPARENT который 0x00000000 на самом деле черный цвет, если вы не заботитесь о альфа части ... Если я использую Color.RED, фон действительно очень красный.

Любая идея, чтобы сделать эту работу? Это ограничение нынешнего Android API? Можно ли использовать draw() вместо этого? но это менее показательно, что это view.getDrawingCache() Я полагаю (без кеша)?

Благодаря

+1

Вы нашли решение? – Antzi

+0

У меня точно такая же проблема – takluiper

ответ

0

кэширование Розыгрыша несколько из реликта до HW-ускоренного Android, так что некоторые вещи могут быть немного запутанными/не так хорошо документировано.

Прозрачность должна работать нормально, если вы не используете View#setDrawingCacheBackgroundColor(int), так как это может привести к тому, что кеш упадет до 16-битного цветового пространства (см. View#mDrawingCacheBackgroundColor).

Этот код

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

должно дать вам ARGB_8888 растрового изображения с прозрачным фоном. (Вы можете также это в отладчике Android Студии настройки точка останова после вызова GET и «View Bitmap» на переменном.

0

Попробуйте этот код после установки макета цвета фона прозрачного в файле 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); 
Смежные вопросы