1.Movie类简介

2.代码实现

import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Movie;import android.graphics.Paint;import android.os.Bundle;import android.util.AttributeSet;import android.view.View;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MyGifView(this));    }        class MyGifView extends View{                //movie管理gif图片里的多个帧        private Movie movie;        //表示开始播放gif图片的绝对时间        private  long movieStart;                public MyGifView(Context context, AttributeSet attrs) {            super(context, attrs);        }        public MyGifView(Context context) {            super(context);                    movie = Movie.decodeStream(getResources().openRawResource(R.drawable.maidi3));                    }                @Override        protected void onDraw(Canvas canvas) {            super.onDraw(canvas);            long currentTime = android.os.SystemClock.uptimeMillis();                        //第一次播放            if(movieStart == 0){                movieStart = currentTime;            }                        //循环播放            if(movie != null){                int duration = movie.duration();                int relTime = (int)((currentTime - movieStart)%duration);                movie.setTime(relTime);                movie.draw(canvas,10,20);//                Paint paint = new Paint();//                paint.setColor(getResources().getColor(android.R.color.holo_green_light));//                movie.draw(canvas,10,20, paint);                invalidate();            }        }            }    }

3.知识点说明

很多情况下,不管是我们自己使用时间间隔来做一些算法,或是调用系统的API,比如动画效果,都会需要基于时间间隔来做,通常做法是:记录开始时间 startTime,然后每次回调时,获取当前时间 currentTime,计算差值 = currentTime - startTime,而获取当前时间,系统提供了两种方法:

SystemClock.uptimeMillis 和 System.currentTimeMillis

这两种方法有何区别呢?

1. SystemClock.uptimeMillis() // 从开机到现在的毫秒数(手机睡眠的时间不包括在内);

2. System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;

但是,第2个时间,是可以通过System.setCurrentTimeMillis修改的,那么,在某些情况下,一但被修改,时间间隔就不准了。

特别说明点:AnimationUtils 中明确说了:

[java]
/**
* Returns the current animation time in milliseconds.
* This time should be used when invoking
* {@link Animation#setStartTime(long)}. Refer to
* {@link android.os.SystemClock} for more
* information about the different available clocks.
* The clock used by this method is
* <em>not</em> the "wall" clock (it is not
* {@link System#currentTimeMillis}).
*
* @return the current animation time in milliseconds
*
* @see android.os.SystemClock
*/

更多相关文章

  1. Android(安卓)Audio Focus的应用(requestAudioFocus)
  2. 修改android系统和watchdog的延时
  3. Android(安卓)Calendar使用过程中遇到的问题
  4. Android执行shell命令
  5. ListView美化
  6. Android播放照相机声音
  7. Android(安卓)MediaPlayer音乐播放
  8. 【Android】如何用MediaPlayer实现一个简单的音视频播放器
  9. android音频、视频、拍照基础操作

随机推荐

  1. 在android平台上编译libpcap-0.9.8 和 jn
  2. android 网络连接处理分析
  3. RecycleView 嵌套 RecycleView 导致自动
  4. 玩转Scroller打造平滑滚动效果
  5. Android(安卓)解决监听home键的几种方法
  6. Android(安卓)采用工厂类创建对话框
  7. android 利用path 实现手写板的手写效果
  8. andrid layout_weight 计算 分析
  9. android 修改标题样式以及内容
  10. Android(安卓)调用系统照相机拍照和录像