我想在我的应用程序中显示动画GIF图像。 我发现Android本身并不支持GIF动画。

但是它可以使用AnimationDrawable显示动画:

开发>指南>图像和图形>绘图概述

这个例子使用动画保存为框架的应用程序资源,但我需要的是直接显示动画gif。

我的计划是将动画GIF分解为帧,并将每帧添加为可绘制的AnimationDrawable。

有人知道如何从动画GIF中提取帧并将它们转换为可绘制的吗?


当前回答

我已经成功地使用了本文中提出的解决方案,一个名为GifMovieView的类,它呈现一个视图,然后可以显示或添加到特定的ViewGroup中。查看指定文章的第2部分和第3部分中介绍的其他方法。

这种方法的唯一缺点是电影上的反锯齿不是很好(一定是使用“阴暗的”Android电影类的副作用)。然后你最好在你的动画GIF中设置一个纯色的背景。

其他回答

@PointerNull给出了很好的解决方案,但并不完美。它不能在一些大文件的设备上工作,并显示有bug的Gif动画与前ICS版本的delta帧。 我找到了没有这个bug的解决方案。它是带有原生解码到可绘制的库:koral的android-gif-drawable。

我认为更好的库来处理gif文件是这个:由koral

使用它,我是成功的,这个库是专用于GIF的;但正如毕加索和滑翔一般用途的图像框架;所以我认为这个库的开发人员完全专注于GIF文件

用壁画。以下是如何做到这一点:

http://frescolib.org/docs/animations.html

以下是示例的回购:

https://github.com/facebook/fresco/tree/master/samples/animation

当心壁画不支持包装内容!

滑翔

Image Loader Library for Android,由谷歌推荐。

Glide和毕加索的很相似,但比毕加索的快得多。 Glide比毕加索消耗的内存要少。

格莱德有而毕加索没有的东西

能够将GIF动画加载到一个简单的ImageView可能是Glide最有趣的功能。是的,你不能这样对待毕加索。 一些重要的环节-

https://github.com/bumptech/glide http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

我找到了一个非常简单的方法,这里有一个很好的简单的工作例子

显示动画小部件

在让它工作之前,在代码中有一些更改要做

在下面

    @Override
    public void onCreate(Bundle savedInstanceState){    
        super.onCreate(savedInstanceStated);   
        setContentView(new MYGIFView());
    }    
}

只是替换

setContentView(new MYGIFView());

in

setContentView(new MYGIFView(this));

而在

public GIFView(Context context) {
    super(context);

提供您自己的gif动画文件

    is = context.getResources().openRawResource(R.drawable.earth);
    movie = Movie.decodeStream(is);
}

替换第一行

public MYGIFView(Context context) {

根据课程名称…

在做了这个小改变后,它应该为我工作…

希望这对你有所帮助