2015-10-02 2 views
1

У меня есть анимированное прозрачное изображение gif и нужно отображать его в android. Я попробовал компонент GifImageView, все в порядке, но фон черный не прозрачный.Анимированное прозрачное изображение GIF

Благодаря

Stream input = Assets.Open("oie_2103618iUK1c2Pr.gif"); 
byte[] bytes; 
using (MemoryStream ms = new MemoryStream()) 
{ 
     input.CopyTo(ms); 
     bytes = ms.ToArray(); 
} 

_gifImageView = new GifImageView(this); 
_gifImageView.SetBytes(bytes); 
_gifImageView.Background = new ColorDrawable(Color.Transparent); 

LinearLayout giflayout = FindViewById<LinearLayout>(Resource.Id.gif);    
giflayout.AddView(_gifImageView); 
+0

Прозрачность на GIF в настоящее время не поддерживается и будет отображаться в черном цвете. https://github.com/jamesmontemagno/GifImageView-Xamarin.Android любым другим способом? – puko

ответ

2

пытаются добавить:

GifImageView.setBackgroung(); 

или прочитать: Transparent GIF in Android ImageView

Вы можете использовать другую библиотеку, как Android Gif Drawable (GifImageView не поддерживает прозрачные гифы), или установите цвет фона (не transpatent) в gif, с редактором gif.

+0

Попробуйте установить _gifImageView.Background = новый ColorDrawable (Color.Transparent); но не работает – puko

+0

показать свой код. – Roman

+0

проверить отредактированный вопрос – puko

0

Вы не можете установить прозрачный фон для gif изображения. Просто удалите его с помощью онлайн-редактора gif. Их очень много

+1

Фон Gif прозрачный, но изображение имеет черный фон ... – puko

0

Текущая версия GifImageView не имеет изменений прозрачности, которые были сделаны всего несколько дней назад. Я смог заставить его работать, выполнив наследование My Activity из GifImageView.IOnFrameAvailableListener и установив свой объект gifImageView.OnFrameAvailableListener в действие (как видно here). Последнее заключалось в том, чтобы реализовать OnFrameAvailable в самой Деятельности.

public Bitmap OnFrameAvailable(Bitmap bitmap) 
    { 
     if (bitmap != null) { 
      var newBitmap = bitmap.Copy (Bitmap.Config.Argb8888, true); 
      newBitmap.HasAlpha = true; 

      var pixelArray = new int[bitmap.Width * bitmap.Height]; 
      bitmap.GetPixels (pixelArray, 0, bitmap.Width, 0, 0, bitmap.Width, bitmap.Height); 
      for (int ctr = 0; ctr <pixelArray.Count(); ctr++) 
      { 
       pixelArray[ctr] = pixelArray[ctr] == -16777216 ? 0 : pixelArray[ctr]; 
      } 
      newBitmap.SetPixels (pixelArray, 0, bitmap.Width, 0, 0, bitmap.Width, bitmap.Height); 
      return newBitmap; 
     } 

     return bitmap; 
    } 

Это сработало для меня, надеюсь, оно работает и для вас. Возможно, вам придется изменить -16777216 на -1, если вы видите белый фон. Надеюсь, GifImageView скоро будет обновлен, так как эта пост-обработка не идеальна.

Смежные вопросы