Подтвердить что ты не робот

Прозрачная часть изображения в ImageView становится черной

У меня проблема при отображении изображения с прозрачностью в Android KitKat (Nexus 7), это нормально в nexus 4 (KitKat) и других предыдущих ОС Android, здесь изображение:

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

также, я использую Picasso для загрузки и кэширования изображения из URL.

4b9b3361

Ответ 1

После некоторой пробной версии: сначала я пытаюсь использовать изображение как ресурс, который можно использовать, и он все еще случается (прозрачная часть изображения становится черной), во-вторых, я конвертирую изображение в png-образ, и он работает, поэтому проблема находится в файле тип (gif). так как в моем реальном приложении изображение, полученное с сервера, и я не могу запросить изображение, как всегда, в формате png, я использую решение по этой ссылке: Прозрачный GIF в Android ImageView

это просто для отображения только одного изображения (например, в моем вопросе), так как я использую Picasso, я использую цель, чтобы стереть черный цвет с изображения аватара следующим образом:

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 для отображения изображений в списке, я impelements Target в ViewHolder, и он очень хорошо работает до сих пор.

Ответ 2

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" />

Ответ 3

Попробуйте следующее:

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

или

imageView.setBackgroundColor(Color.TRANSPARENT);

Надеюсь, что это поможет.