实现播放gif效果
2011-07-15 14:59
183 查看
在BitmapDecode这个例子中,从里面可以学到有流转化为字节数组,同时有两种读取留图片的方法,还有两种现在图片的方法,但是我觉得在这里最好用的还是能显示出gif效果,通常gif图片是只显示第一的。
首先是将图片转化为流java.io.InputStream is;
is = context.getResources().openRawResource(R.drawable.beach);
后面就有两种实现:bm = BitmapFactory.decodeStream(is, null, opts);
BitmapFactory.decodeStream(is);
第二种很简单了 关键是第一种的第三个参数:
BitmapFactory.Options opts = new BitmapFactory.Options();
Bitmap bm;
opts.inJustDecodeBounds = false; // this will request the bm 默认是false 如果设置为true 那么返回的图像是为null 这点注意。
// scaled down by 4 默认为1 只要《=1 就是显示原图片的大小,其他的你设置为4就是原图片的1/4倍大小。
opts.inSampleSize = 4;
bm = BitmapFactory.decodeStream(is, null, opts);
后面呢 就是从一个图像复制另一个图像了,这里用到了复制色素的数组:
int w = mBitmap2.getWidth();
int h = mBitmap2.getHeight();
int[] pixels = new int[w*h];
mBitmap2.getPixels(pixels, 0, w, 0, 0, w, h);
mBitmap3 = Bitmap.createBitmap(pixels, 0, w, w, h,
Bitmap.Config.ARGB_4444);
在后面的代码 就是实现gif图像的了:
is = context.getResources().openRawResource(R.drawable.a3);
mMovie = Movie.decodeStream(is);
或者呢
byte[] array = streamToBytes(is);
mMovie = Movie.decodeByteArray(array, 0, array.length);
如果这么做还不能完全实现动态效果,必须是时时更新画面,才可以达到播放gif效果:
long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) { // first time
mMovieStart = now;
}
if (mMovie != null) {
int dur = mMovie.duration();
Log.i("dur","AA"+dur);
if (dur == 0) {
dur = 300;
}
int relTime = (int)((now - mMovieStart) % dur);
mMovie.setTime(relTime);
// mMovie.draw(canvas, getWidth() - mMovie.width(), getHeight() - mMovie.height());
mMovie.draw(canvas, 150,250);
invalidate();
}
上面的代码中最重要的就是 mMovie.setTime(relTime); 里面的参数必须是变化的 不然也只有第一帧动画
invalidate();也是必须的
其他的细节就是画图了:
两种方法,也说不上两种方法了 只要注意就好:
canvas.drawBitmap(mBitmap4, 210, 170, null);
mDrawable.draw(canvas);
第二种只是当你设置setBounds属性的时候,画图显示只能采用这种方法而不能采用上面的方法。
mDrawable = context.getResources().getDrawable(R.drawable.button);
mDrawable.setBounds(150, 20, 300, 100);
来自: http://hi.baidu.com/%D6%C7%B4%EF%B8%DF%D4%B6lee/blog/item/1a0027487a274d3109f7efde.html
首先是将图片转化为流java.io.InputStream is;
is = context.getResources().openRawResource(R.drawable.beach);
后面就有两种实现:bm = BitmapFactory.decodeStream(is, null, opts);
BitmapFactory.decodeStream(is);
第二种很简单了 关键是第一种的第三个参数:
BitmapFactory.Options opts = new BitmapFactory.Options();
Bitmap bm;
opts.inJustDecodeBounds = false; // this will request the bm 默认是false 如果设置为true 那么返回的图像是为null 这点注意。
// scaled down by 4 默认为1 只要《=1 就是显示原图片的大小,其他的你设置为4就是原图片的1/4倍大小。
opts.inSampleSize = 4;
bm = BitmapFactory.decodeStream(is, null, opts);
后面呢 就是从一个图像复制另一个图像了,这里用到了复制色素的数组:
int w = mBitmap2.getWidth();
int h = mBitmap2.getHeight();
int[] pixels = new int[w*h];
mBitmap2.getPixels(pixels, 0, w, 0, 0, w, h);
mBitmap3 = Bitmap.createBitmap(pixels, 0, w, w, h,
Bitmap.Config.ARGB_4444);
在后面的代码 就是实现gif图像的了:
is = context.getResources().openRawResource(R.drawable.a3);
mMovie = Movie.decodeStream(is);
或者呢
byte[] array = streamToBytes(is);
mMovie = Movie.decodeByteArray(array, 0, array.length);
如果这么做还不能完全实现动态效果,必须是时时更新画面,才可以达到播放gif效果:
long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) { // first time
mMovieStart = now;
}
if (mMovie != null) {
int dur = mMovie.duration();
Log.i("dur","AA"+dur);
if (dur == 0) {
dur = 300;
}
int relTime = (int)((now - mMovieStart) % dur);
mMovie.setTime(relTime);
// mMovie.draw(canvas, getWidth() - mMovie.width(), getHeight() - mMovie.height());
mMovie.draw(canvas, 150,250);
invalidate();
}
上面的代码中最重要的就是 mMovie.setTime(relTime); 里面的参数必须是变化的 不然也只有第一帧动画
invalidate();也是必须的
其他的细节就是画图了:
两种方法,也说不上两种方法了 只要注意就好:
canvas.drawBitmap(mBitmap4, 210, 170, null);
mDrawable.draw(canvas);
第二种只是当你设置setBounds属性的时候,画图显示只能采用这种方法而不能采用上面的方法。
mDrawable = context.getResources().getDrawable(R.drawable.button);
mDrawable.setBounds(150, 20, 300, 100);
来自: http://hi.baidu.com/%D6%C7%B4%EF%B8%DF%D4%B6lee/blog/item/1a0027487a274d3109f7efde.html
相关文章推荐
- iOS中三种方式实现登录界面播放视频或gif效果
- 自定义ViewFlipper实现带索引效果的自动播放广告栏
- 在VC中如果实现GIF的播放?
- 【FLEX】实现音频播放的波浪效果【转】
- 实现android gif图片动画播放功能
- JS实现的多张图片轮流播放幻灯片效果
- VideoView 实现引导页播放视频欢迎效果
- Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现
- js自动播放效果的实现
- DerectX7实现播放音乐效果
- android 实现 bilili 动画播放效果
- Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷
- android 仿淘宝实现标题栏滑动渐变效果,gif有点丑,凑合看吧!
- iOS 实现gif 图片效果 以及 图片不变形处理
- 2.3、jwplayer实现类PPT课件播放效果
- [Windows Mobile] C#实现GIF图片播放
- reveal.js实现html播放ppt的炫酷效果
- Android使用PowerImageView实现播放强大的ImageView动画效果
- 使用JS和canvas实现gif动图的停止和播放代码
- Qt 中 实现gif动画的播放