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之AnimationDrawable
  2. android 动画深入分析(一)《android开发艺术与探索》
  3. animation的xml定义中的android:interpolator属性
  4. 2011.07.18(4)——— android 播放gif
  5. android视图切换动画:ViewAnimator类及其子类
  6. 2011.07.18(2)——— android Animation的另一种运行
  7. 2011.07.18(2)——— android Animation的另一种运行
  8. Android(安卓)实现 按钮从两边移到中间动画效果
  9. Android(安卓)Media Framework 总纲

随机推荐

  1. SQL中EXPLAIN命令的使用方法
  2. Mysql 索引该如何设计与优化
  3. Django创建项目+连通mysql的操作方法
  4. MySQL Group by的优化详解
  5. MySQL 复制表的方法
  6. 详解MySQL kill 指令的执行原理
  7. Mysql调优Explain工具详解及实战演练(推
  8. mysql数据库删除重复数据只保留一条方法
  9. android学习笔记---59_各种图形的使用介
  10. Android(安卓)Map API key 申请