浏览了很多网上很多关于Gif图片显示的资料,总结起来一共为四种方案:
1.使用GitHub:android-gif-drawable ,具体方法网上很多参考。
缺点:目前GitHub上的源码是使用AndroidStudio写的,使用Eclipse编译起来比较麻烦,而且,使用jni,对于一般跟我一样水平的一时还搞不明白,且使用下载的最近的jar包某些机型会报jni的错,比如HTC M8 和三星S4.
2.使用GifView,该种方案在网上使用较多,参考资料也较多,说一说我使用该jar包遇到的问题,在加载大量图片的时候,我加载了一共9张图,显示第3张的时候出现OOM。
3.使用Movie,这是我在使用以上两种方案不成功之后,采用的方案,一会具体说说实现过程。
4.使用webview,该种方法没有写demo测试,具体可行性为止,看到有人问,如何释放webview加载的资源,应该是存在这样的问题的,但是,如果可以解决,也不失为一种好的方案。
具体说一说,第三种方案,使用Movie现实现实Gif图片。
/**
* This is a View class that wraps Android {@link Movie} object and displays it.
* You can set GIF as a Movie object or as a resource id from XML or by calling
* {@link #setMovie(Movie)} or {@link #setMovieResource(int)}.
* <p>
* You can pause and resume GIF animation by calling {@link #setPaused(boolean)}.
* <p>
* The animation is drawn in the center inside of the measured view bounds.
*
* @author Sergey Bakhtiarov
*/
public class GifMovieView extends View {
private static final int DEFAULT_MOVIEW_DURATION = 1000;
private int mMovieResourceId;
private Movie mMovie;
private long mMovieStart;
private int mCurrentAnimationTime = 0;
/**
* Position for drawing animation frames in the center of the view.
*/
private float mLeft;
private float mTop;
/**
* Scaling factor to fit the animation within view bounds.
*/
private float mScale;//控制图片显示大小
/**
* Scaled movie frames width and height.
*/
private int mMeasuredMovieWidth;
private int mMeasuredMovieHeight;
private volatile boolean m