2013-12-05 2 views
17

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

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.

+1

Каков цвет вашего фона? –

+0

Вы можете настроить цвет фона ImageView на прозрачный. –

+0

@ConnectinglifewithAndroid none, нет фона для изображения, а также макета контейнера imageview – hakim

ответ

8

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

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

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; 
} 

но так как я использую Пикассо для отображения изображений в виде списка, Я импе lements Target в ViewHolder, и это очень хорошо работает до сих пор.

+6

У меня была аналогичная проблема, и она была решена с помощью этого 'b.setHasAlpha (true);'. Это может быть критическая линия ... Престижность! – hosolmaz

+1

@hosolmaz не сработал для меня – fnc12

+0

эта вещь удален чистый черный но не touch semi черный – fnc12

-2

Попробуйте это:

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

или

imageView.setBackgroundColor(Color.TRANSPARENT); 

Надеется, что это помогает.

+0

спасибо, к сожалению, он не работает – hakim

+0

@hakim: did u try с каким-то другим изображением –

1
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" /> 
+0

спасибо, но это не сработало – hakim