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

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


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


animation.gif是需要播放的GIF动画。
MainActivity实现了加载GIF动画的功能。
public class MainActivity extends Activity {         private Movie mMovie;     private long mMovieStart;    /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);        setContentView(new CustomGifView(this));           }    class CustomGifView extends View {        public CustomGifView(Context context) {             super(context);             mMovie = Movie.decodeStream(getResources().openRawResource(                     R.drawable.animation));        }                 public void onDraw(Canvas canvas) {            long now = android.os.SystemClock.uptimeMillis();                         if (mMovieStart == 0) { // first time                 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();             }         }    }}

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

将GIF动画以文件流的形式转换成Movie。
public void onDraw(Canvas canvas) {        long now = android.os.SystemClock.uptimeMillis();                 if (mMovieStart == 0) { // first time             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();         }     }

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






源代码见: http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/

更多相关文章

  1. Android(安卓)Activity界面切换添加动画特效
  2. android实现字体闪烁动画的方法
  3. Android:interpolator用法
  4. Android(安卓)Audio Focus的应用(requestAudioFocus)
  5. 创建android逐帧动画的两种方式
  6. Android(安卓)Activity界面切换添加动画特效
  7. android dialog 动画
  8. Android(安卓)属性动画(Property Animation) 完全解析 (下)
  9. Android(安卓)Activity界面切换添加动画特效

随机推荐

  1. 科大讯飞语音实现Android拨号之二
  2. 图形,文件处理
  3. Linux 创建桌面启动器教程
  4. android studio 集成zxing二维码,条形码扫
  5. Android(安卓)淘宝滑动条,淘宝菜单滑动条;
  6. android 自定义弹出框AlertDialog
  7. Android启动Activity的标准Action和标准C
  8. Android中的Adapter简单介绍
  9. 用acharengine作Android图表
  10. Android中AIDL的使用过程