Android的ImageView无法直接加载Gif图片,如果需要在自己的代码中加载一个gif图片(这很常见,比如下载过程中的loading以示正在下载的转动的圆球),则无法直接用ImageView。鉴于此,Android社区开发者为解决此问题贡献了很多解决方案,其中一种比较简易且比较流行的做法是通过Android Movie的方式把一个gif图片当作一个原始的资源加载到Movie,然后Movie将其解析为Movie帧进行加载。具体代码如下:

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Movie; 
import android.util.AttributeSet; 
import android.view.View; 
 
public class ZhangPhilGifView extends View { 
 
	private Movie mMovie; 
	private long mMovieStart = 0; 
	 
	public ZhangPhilGifView(Context context, AttributeSet attrs) { 
		super(context, attrs); 
		mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation)); 
	} 
 
	@Override 
	public void onDraw(Canvas canvas) { 
 
		long now = android.os.SystemClock.uptimeMillis(); 
 
		if (mMovieStart == 0) { 
			mMovieStart = now; 
		} 
 
		if (mMovie != null) { 
			int dur = mMovie.duration(); 
			 
			if (dur == 0) { 
				dur = 1000; 
			} 
			 
			int relTime = (int) ((now - mMovieStart) % dur); 
			mMovie.setTime(relTime); 
			mMovie.draw(canvas, 0, 0); 
			 
			invalidate(); 
		} 
	} 
}


使用时候,直接将其作为一个Android普通的view使用即可,但需要在构造函数时候写进一个拟打算加载的gif资源文件id。比如drawable目录下面的animation.gif文件,其id为:R.drawable.animation


附录文章:

《基于开源框架Glide加载Gif资源图到Android ImageView中》链接地址:http://blog.csdn.net/zhangphil/article/details/45561983

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

搜索引擎概述之倒排索引索引详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。