Android支持GIF动画,但是如果利用ImageView标签直接写在布局文件中:
Xml代码
  1. <ImageViewandroid:id="@+id/gifpicture"
  2. android:layout_width="fill_parent"
  3. android:layout_height="wrap_content"
  4. android:src="@drawable/animation"/>

程序只能加载GIF动画的第一帧。效果如下:


如果想要正常播放GIF动画,需要借助Movie实现。写了一个简单示例,程序目录结构如下:


animation.gif是需要播放的GIF动画。
MainActivity实现了加载GIF动画的功能。
Java代码
  1. publicclassMainActivityextendsActivity{
  2. privateMoviemMovie;
  3. privatelongmMovieStart;
  4. /**Calledwhentheactivityisfirstcreated.*/
  5. @Override
  6. publicvoidonCreate(BundlesavedInstanceState){
  7. super.onCreate(savedInstanceState);
  8. setContentView(newCustomGifView(this));
  9. }
  10. classCustomGifViewextendsView{
  11. publicCustomGifView(Contextcontext){
  12. super(context);
  13. mMovie=Movie.decodeStream(getResources().openRawResource(
  14. R.drawable.animation));
  15. }
  16. publicvoidonDraw(Canvascanvas){
  17. longnow=android.os.SystemClock.uptimeMillis();
  18. if(mMovieStart==0){//firsttime
  19. mMovieStart=now;
  20. }
  21. if(mMovie!=null){
  22. intdur=mMovie.duration();
  23. if(dur==0){
  24. dur=1000;
  25. }
  26. intrelTime=(int)((now–mMovieStart)%dur);
  27. mMovie.setTime(relTime);
  28. mMovie.draw(canvas,0,0);
  29. invalidate();
  30. }
  31. }
  32. }
  33. }

内部类CustomGifView 利用Movie播放GIF动画。解释一下:
Java代码
  1. mMovie=Movie.decodeStream(getResources().openRawResource(R.drawable.animation));

将GIF动画以文件流的形式转换成Movie。
Java代码
  1. publicvoidonDraw(Canvascanvas){
  2. longnow=android.os.SystemClock.uptimeMillis();
  3. if(mMovieStart==0){//firsttime
  4. mMovieStart=now;
  5. }
  6. if(mMovie!=null){
  7. intdur=mMovie.duration();
  8. if(dur==0){
  9. dur=1000;
  10. }
  11. intrelTime=(int)((now–mMovieStart)%dur);
  12. mMovie.setTime(relTime);
  13. mMovie.draw(canvas,0,0);
  14. invalidate();
  15. }
  16. }

invalidate();作用是刷新当前View,这样onDraw方法重复执行,Movie就能画出GIF动画的每一帧。到此,GIF动画就能正常播放了。


更多相关文章

  1. Android(安卓)进程间通信的几种实现方式
  2. Android_UI_实现TabHost的两种方法
  3. Android的AIDL服务
  4. Android自定义动画专题一
  5. Android(安卓)RotateAnimation详解
  6. android客户端xmpp & smack & openfire简单开发实例
  7. 在eclipse里配置Android(安卓)ndk环境 适用于windows mac 和linu
  8. Android(安卓)原生控件ViewFlipper实现淘宝头条垂直滚动广告条
  9. Android对文件的操作(简单的文件读取与写入)

随机推荐

  1. Android软件安全与逆向分析
  2. Android开发视频教程大总结—23部视频教
  3. 【拿来主义】Android反编译工具
  4. Google手机操作系统Android应用开发入门
  5. Android(安卓)(6.0) 系统启动流程梳理
  6. Android(安卓)数据库简单操作
  7. Android卡片式列表布局
  8. 2018-03-08(Android四大启动模式)
  9. Android用户界面 UI组件--TextView及其子
  10. 理解 Android(安卓)消息机制