2011.07.18(4)——— android 播放gif

参考:APIDemos——graphics——BitmapDecode

Android API中用来解码图像的类主要有BitmapFactory (静态图像PNG或是JPEG)和Movie 解码动画(gif动画等)。

对图像或动画解码,数据源可以说byte 数组,InputStream ,资源ID,或者指定文件名。对于BitmapFactory来说,还可以通过BitmapFactory.Options 指定解码时的一些设置。

opts.inJustDecodeBounds = true

表示解码时只想获取被解码图像的长度和宽度,此时bm返回值为null, 而opts.outWidth, opts.outHeight中返回了图像的宽度和长度

opts.inSampleSize = 4; 

代码将采样大小设为4,相当于每隔4个像素采样一次,结果是解码后的图像为原图的四分之一(具体的采用算法由平台决定,并非简单的隔4个像素取其中一个像素值)。



android.graphics.Movie对应可以用来解码.gif动画资源,从数组或是直接从InputStream中解码:R.drawable.animated_gif 为一飘动的旗帜动画。
private Movie mMovie;            .....            is = context.getResources().openRawResource(R.drawable.animated_gif);            if (true) {                mMovie = Movie.decodeStream(is);            } else {                byte[] array = streamToBytes(is);                mMovie = Movie.decodeByteArray(array, 0, array.length);            }            ....           private static byte[] streamToBytes(InputStream is) {            ByteArrayOutputStream os = new ByteArrayOutputStream(1024);            byte[] buffer = new byte[1024];            int len;            try {                while ((len = is.read(buffer)) >= 0) {                    os.write(buffer, 0, len);                }            } catch (java.io.IOException e) {            }            return os.toByteArray();        }


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, getWidth() - mMovie.width(),                            getHeight() - mMovie.height());                invalidate();            }




更多相关文章

  1. android视图切换动画:ViewAnimator类及其子类
  2. Android 实现 按钮从两边移到中间动画效果
  3. Android之一种很有趣的界面跳动提示动画
  4. android 动画之水波纹效果ripple
  5. Andorid旋转动画
  6. Android SQLite存取图像
  7. android 文字滚动动画
  8. Android的Activity屏幕切换动画(一)-左右滑动切换
  9. [Android 动画]简要分析一下Animator 与 Animation

随机推荐

  1. 收好100个最常用的PHP函数
  2. 详解PHP使用gearman进行异步的邮件或短信
  3. php session 会话(专题)
  4. PHP如何结合MySQL进行千万级数据处理
  5. 分析PHP中PHPMailer如何发邮件
  6. 案例分析PHP Web表单生成器
  7. php获取当前时间戳、日期并精确到毫秒(三
  8. PHP使用POP3读取邮箱接收邮件的实例解析
  9. 详解之php反序列化
  10. 教你用php将二维码和文字结合到一个背景