2012-02-01 2 views
9

で失敗:アンドロイド:PNGの透明性は、私は私のAndroidアプリケーションでの資産フォルダからPNGファイルを引っ張って、次の方法を使用していますBitmapFactory.decodeStream(...)と資産フォルダ

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画像には透明な部分がありますが、何らかの理由で画像がGridVで表示される見ると、透明領域は黒く見えます。

いくつかの質問を先取りする:いいえ、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; 
     } 
    } 

しかし、それは私に同じ悪い結果をもたらしました。

ありがとうございます。

+0

が、私は同じ問題を持っている:(任意の更新は? – fvisticot

+0

ようだ。あなたは(デコード後)Bitmapオブジェクト内のピクセルをダンプして、透明な領域で正しいアルファ値を持っていることを確認することができますか? Bitmap.getPixels()を使用します。 – SirKnigget

答えて

0

これに代えて、試してみてください。

ImageView img=new ImageView(this); 
     Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null); 
     img.setImageDrawable(d); 
0

をあなたのイメージがアプリケーション・リソースから作られ、それが/描画可能の代わりに、特定の解像度のいずれかのフォルダのres /の下に置かれている場合(例えばRES /描画可能-hdpi )

透明ピクセルがGIFFファイルの場合は白(または黒作られていますので、アンドロイドコンパイラはPNGを最適化された)

解像度:解像度/描画可能-hdpiや他のものにあなたのPNGファイルを移動 引き出し可能なフォルダ、あなたは大丈夫です。あなたはアルファチャンネルを失っているように

関連する問題