简介
android不推荐使用gif图片,一般都是png的,对于gif的图片解析比较消耗资源,但是对于一些动态gif图片的播放,如果比较小的话还是可以的,要是大的话,建议还是把gif图片转换成一帧一帧的png图片,然后通过animation播放。对于小的gif动态图片,可以通过Movie来播放。注意,不能再布局中以自定义view的形式使用。
Activity
public class MainActivity extends Activity {LinearLayout root;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);root = (LinearLayout) findViewById(R.id.root);root.addView(new CustomGifView(this, R.drawable.loading));}}<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/root"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#666"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="简单的展示GIF动态图" /></LinearLayout>
自定义View
/*** 自定义View 播放Gif动画*/public class CustomGifView extends View {private Movie mMovie;private long mMovieStart;public CustomGifView(Context context, int resId) {super(context);//读入字节流(或字节数组或文件)来解码创建Movie对象mMovie = Movie.decodeStream(getResources().openRawResource(resId));}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();}}}
原文:http://www.cnblogs.com/baiqiantao/p/126b8ef4a2705039bfbae5ea2bcc26e8.html