Android GIF播放,MP4文件播放笔记
一、添加GIF动图
Glide是一个非常强大的图片加载框架,并且还能播放视频和加载GIF,因此我们使用Glide加载GIF资源。
1.添加依赖&&添加GIF资源
首先是添加Glide的依赖:
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.github.bumptech.glide:okhttp-integration:1.4.0'
我们将GIF图片放在drawable文件夹下,然后直接调用方法即可加载动图
Glide.with(this)
.load(R.drawable.img_gif)
//.asGif()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(new GlideDrawableImageViewTarget(mImageView, 1));
简单介绍一下几个方法:
load():加载对应的资源,可以使resouce资源ID,也可以是Uri;
asGif():是否作为GIF图片加载,默认不调用该方法也可以加载GIF文件,但是如果添加了该方法,那么只能加载GIF图片,因此不如不加;
diskCacheStrategy():设置缓存策略;
DiskCacheStrategy.SOURCE:缓存原始数据,
DiskCacheStrategy.RESULT:缓存变换(如缩放、裁剪等)后的资源数据,
DiskCacheStrategy.NONE:什么都不缓存,
DiskCacheStrategy.ALL:缓存SOURC和RESULT。
默认采用DiskCacheStrategy.RESULT策略,对于download only操作要使用DiskCacheStrategy.SOURCE。
into():这行代码意味着GIF动图只加载一次,不循环播放,播放完毕时保持最后一帧的状态。
如果想要无限循环GIF图片,那就更简单了!只需要:
Glide.with(this)
.load(R.drawable.img_gif)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(mImageView);
二、更多需求
更多情况下我们播放GIF还需要更多的需求,比如播放完毕后做一些事情,这样我们可以添加一个监听,监听GIF播放完毕时的状态,从而实现其他需求:
Glide.with(this)
.load(R.drawable.img_gif2)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.listener(new RequestListener<Integer, GlideDrawable>() {
@Override
public boolean onException(Exception e, Integer model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource,
Integer model,
Target<GlideDrawable> target,
boolean isFromMemoryCache,
boolean isFirstResource) {
// 计算动画时长
GifDrawable drawable = (GifDrawable) resource;
GifDecoder decoder = drawable.getDecoder();
int duration = 0;
for (int i = 0; i < drawable.getFrameCount(); i++) {
duration += decoder.getDelay(i);
}
//发送延时消息,通知动画结束,并在handler中做出对应行为
handler.sendEmptyMessageDelayed(MESSAGE_PLAY_END,
duration);
return false;
}
})
.into(new GlideDrawableImageViewTarget(mImageView, 1));
二、VideoView播放MP4文件
我们可以将MP4文件放到res文件夹下的raw文件夹中,然后:
String uri = "android.resource://" + getPackageName() + "/" + R.raw.anim;
Uri uriMp4 = Uri.parse(uri);
mVideoView.setVideoURI(uriMp4);
mVideoView.start();
关于VideoView使用方法的API,网上有很多文章,不赘述。