动画透明GIF图像

时间:2015-10-02 08:32:57

标签: android xamarin

我有动画透明的gif图像,需要在android中显示它。我尝试了Component GifImageView,一切正常,但背景是黑色不透明。

由于

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

3 个答案:

答案 0 :(得分:2)

尝试添加:

GifImageView.setBackgroung();

或阅读:Transparent GIF in Android ImageView

你可以使用另一个库,比如Android Gif Drawable(GifImageView不支持透明的GIF),或者使用gif编辑器在gif中设置背景颜色(不透明)。

答案 1 :(得分:0)

你无法为gif图像设置透明背景。只需使用在线gif编辑器删除它。其中有很多

答案 2 :(得分:0)

当前版本的GifImageView几天前没有透明度变化。通过让我的Activity继承自GifImageView.IOnFrameAvailableListener并将我的gifImageView.OnFrameAvailableListener设置为Activity(如here所示),我能够使它工作。最后一件事是在Activity本身实现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很快得到更新,因为这种后处理并不理想。