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 для этого Bitmap.

Вот рассматриваемый 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;
        }
    }

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

Есть идеи, кто-нибудь?

Спасибо.

9
задан mahdaeng 1 February 2012 в 07:03
поделиться