Я использую следующий метод для извлечения файла 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;
}
}
Но это дало мне тот же плохой результат.
Есть идеи, кто-нибудь?
Спасибо.