2016-09-10 6 views
4

У меня есть приложение с двумя видами - один поверх другого. В верхней части я использую растровое изображение (ARGB_8888), загруженное из ресурса PNG, и я играю с его альфа-каналом, чтобы некоторые части его исчезли, и один из них становится видимым. Все работает отлично, если исходное изображение имеет, по крайней мере, один прозрачный пиксель для начала. Но если исходный PNG не имеет прозрачных пикселей, тогда изменение его альфа на 0 делает пиксель я изменен черным, а не прозрачным.PNG теряют прозрачность в Android (если все пиксели не прозрачны)

Любые идеи, что можно сделать, чтобы исправить это? ничего похожего:

aaptOptions { 
    cruncherEnabled = false 
} 

но другой вариант?

В настоящее время я изменяю исходные изображения перед компиляцией, делая крошечную область «полупрозрачной», но хотел бы избежать этого.

+0

Вы видели этот вопрос http://stackoverflow.com/questions/2881939/android-read-png-image-without-alpha-and-decode-as-argb-8888? –

+0

Похоже, что ваши изображения были 24 бит, если у них не было прозрачности (32 бит). Таким образом, вы верны в ответ на необходимость конвертировать его в альфа, либо загружая его, как вы, либо сохраняя сам файл как 32-битный. –

ответ

3

Ok. Наконец, понял.

Мне пришлось добавить одну строку. Вместо того, чтобы:

mBitmap = BitmapFactory.decodeResource(getResources(), getResourceID()).copy(Bitmap.Config.ARGB_8888, true); 

Я теперь с помощью:

mBitmap = BitmapFactory.decodeResource(getResources(), getResourceID()).copy(Bitmap.Config.ARGB_8888, true); 
mBitmap.setHasAlpha(true); 

и нет необходимости добавлять прозрачный пиксель на исходном изображении!

 Смежные вопросы

  • Нет связанных вопросов^_^