21

Android KitKat (Nexus 7) で透明な画像を表示すると問題が発生します。nexus 4 (KitKat) およびその他の以前の Android OS では問題ありません。画像は次のとおりです。

ここに画像の説明を入力

および 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) で実行したときのスクリーンショットを示します。 ここに画像の説明を入力

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

4

3 に答える 3

9

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

Picasso を使用しているので、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;
}

しかし、リストビューに画像を表示するためにPicassoを使用しているため、ViewHolderにTargetを実装し、これまでのところ非常にうまく機能しています。

于 2013-12-05T14:11:39.280 に答える
-2

これを試して :

android:background="@android:color/transparent"

また

imageView.setBackgroundColor(Color.TRANSPARENT);

お役に立てれば。

于 2013-12-05T09:40:35.397 に答える