Android: Прозрачность PNG не работает с BitmapFactory.decodeStream (…) и папкой с активами

Я использую следующий метод, чтобы вытащить PNG-файл из папки активов в приложении для Android:

public static Bitmap getBitmapFromAssets(Context context, String fileName) { try { AssetManager assetManager = context.getAssets(); InputStream inputStream = assetManager.open(fileName); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } catch(Exception ex) { ex.printStackTrace(); return null; } } 

Затем я устанавливаю источник ImageView в элементе GridView для этого растрового изображения.

Вот пример XML-макета:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/containingLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_horizontal" android:background="@android:color/transparent" android:padding="0dp" android:layout_margin="0dp" > <ImageView android:id="@+id/ivPackageIcon" style="@style/smLargeGridItemPackageIconStyle" /> </LinearLayout> 

И стиль, упомянутый в этом XML:

 <style name="smLargeGridItemPackageIconStyle"> <item name="android:scaleType">fitXY</item> <item name="android:layout_width">100dp</item> <item name="android:layout_height">142dp</item> <item name="android:layout_margin">5dp</item> <item name="android:background">@android:color/transparent</item> </style> 

Вот код, который устанавливает источник ImageView:

 ImageView ivPackageIcon = (ImageView)containingView.findViewById(R.id.ivPackageIcon); if(ivPackageIcon != null) { Bitmap coverImage = getBitmapFromAssets(containingView.getContext(), "myimage.png"); ivPackageIcon.setImageBitmap(coverImage); } 

Изображение PNG имеет несколько прозрачных областей, но по какой-то причине, когда изображение отображается в моем GridView, прозрачные области проникают в черный цвет.

Чтобы упредить некоторые вопросы: Нет, фон элемента Activity, ImageView, GridView и GridView не является черным. По сути, независимо от того, какие цвета фона установлены, прозрачные части изображения всегда проходят как черные.

Подумайте об этом, хотя … Если я поместил PNG-изображение в выпадающую папку и установил ImageView следующим образом, прозрачность будет идеальной:

 ivPackageIcon.setImageResource(R.drawable.myimage); 

Я почти уверен, что использую метод decodeStream (…) некорректно, но я не знаю, что я делаю неправильно. Я даже модифицировал свой оригинальный метод, чтобы установить некоторые параметры, как показано здесь:

 public static Bitmap getBitmapFromAssets(Context context, String fileName) { try { AssetManager assetManager = context.getAssets(); InputStream inputStream = assetManager.open(fileName); BitmapFactory.Options options = new BitmapFactory.Options(); options.inDither = true; options.inPreferredConfig = Config.ARGB_8888; Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options); return bitmap; } catch(Exception ex) { ex.printStackTrace(); return null; } } 

Но это дало мне такой же плохой результат.

Любые идеи, кто-нибудь?

Спасибо.

Solutions Collecting From Web of "Android: Прозрачность PNG не работает с BitmapFactory.decodeStream (…) и папкой с активами"

Вместо этого попробуйте:

 ImageView img=new ImageView(this); Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null); img.setImageDrawable(d); 

Если ваше изображение сделано из ресурса приложения, оно помещается под res / drawable / вместо одной из конкретных папок разрешения (например, res / drawable-hdpi)

Компилятор android оптимизирует PNG, поэтому прозрачные пиксели становятся белыми (или черными в случае файлов GIFF)

Разрешение: переместите PNG-файл в res / drawable-hdpi или в одну из других доступных папок, и все будет в порядке.