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;
}
}
しかし、それは私に同じ悪い結果をもたらしました。
ありがとうございます。
が、私は同じ問題を持っている:(任意の更新は? – fvisticot
ようだ。あなたは(デコード後)Bitmapオブジェクト内のピクセルをダンプして、透明な領域で正しいアルファ値を持っていることを確認することができますか? Bitmap.getPixels()を使用します。 – SirKnigget