web-dev-qa-db-ja.com

ImageViewの画像の透明部分が黒くなる

Android KitKat(Nexus 7))で透明度のある画像を表示するときに問題があります。それは、nexus 4(KitKat)および他の以前のAndroid OS、ここでは問題ありません)画像:

enter image description here

およびImageViewレイアウト:

<ImageView
Android:id="@+id/avatar"
Android:layout_width="35dp"
Android:layout_height="35dp"
Android:layout_gravity="center_vertical"
Android:layout_marginLeft="21dp"
Android:padding="3dp"
Android:src="@drawable/icon_button_profile_new"
Android:tag="@string/avatar" />

そして、Nexus 7(Android 4.4)で実行したときのスクリーンショット enter image description here

また、私はURLからの画像のダウンロードとキャッシュにピカソを使用しています。

20
hakim

いくつかの試行の後:最初に画像をリソースドローアブルとして使用してみますが、それでも起こります(画像の透明な部分が黒くなります)、次に画像をpng画像に変換し、それが機能するため、問題はファイルの種類(gif )。私の実際のアプリではサーバーから取得した画像であり、いつものように画像をpng形式で要求することはできないため、このリンクからのソリューションを使用します: Transparent GIF in Android ImageView

私のピカソを使用しているので、1つの画像のみを表示するのは簡単です(私の質問のように)。ターゲットを使用して、次のように画像アバターから黒色を消去します。

target = new Target() {         
@Override
public void onPrepareLoad(Drawable arg0) {

}

@Override
public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
    if (Build.VERSION.SDK_INT == 19/*Build.VERSION_CODES.KitKat*/){
        Bitmap editedavatar = AndroidUtils.eraseColor(bitmap, -16777216);
        avatar.setImageBitmap(editedavatar);
    }
}

@Override
public void onBitmapFailed(Drawable arg0) {
    avatar.setImageResource(R.drawable.ic_profile_default);

消去色は静的メソッドの場合

public static Bitmap eraseColor(Bitmap src, int color) {
    int width = src.getWidth();
    int height = src.getHeight();
    Bitmap b = src.copy(Config.ARGB_8888, true);
    b.setHasAlpha(true);

    int[] pixels = new int[width * height];
    src.getPixels(pixels, 0, width, 0, 0, width, height);

    for (int i = 0; i < width * height; i++) {
        if (pixels[i] == color) {
            pixels[i] = 0;
        }
    }

    b.setPixels(pixels, 0, width, 0, 0, width, height);

    return b;
}

しかし、私はリストビューに画像を表示するためにピカソを使用しているため、ViewHolderで Target をインプリメントし、これまでのところ非常にうまく機能しています。

8
hakim
Try this
<ImageView
Android:id="@+id/avatar"
Android:layout_width="35dp"
Android:layout_height="35dp"
Android:layout_gravity="center_vertical"
Android:layout_marginLeft="21dp"
Android:padding="3dp"
Android:src="@drawable/icon_button_profile_new"
Android:background="#00000000"
Android:tag="@string/avatar" />
1
Arslan