Android:PNG透明度与BitmapFactory.decodeStream(…)和资产文件夹失败

我正在使用以下方法从我的Android应用程序的资产文件夹中提取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; } } 

然后,我在GridView的项目中将ImageView的源设置为该位图。

这里是有问题的布局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中时,透明区域会以黑色显示。

为了抢占一些问题:不,活动,ImageView,GridView和GridView项目的背景不是黑色的。 事实上,不pipe背景颜色是什么,透明部分总是像黑色一样透出。

考虑到这一点,虽然…如果我把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文件,则为黑色)

解决scheme:将您的PNG文件移动到res / drawable-hdpi或其他可绘制文件夹之一,并且您应该可以。