Android GIF播放,MP4资源播放笔记

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,网上有很多文章,不赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值