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