我正在使用以下方法从我的Android应用程序中的assets文件夹中提取PNG文件:
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 的源设置为该位图,该 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图像放置在drawable文件夹中,并按如下方式设置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;
}
}
但是这给了我同样的糟糕结果。有什么想法吗?谢谢。