一、简介
    glide库非常强大,能够加载gif图片就是其中之一,今天,我们就一起看一看如何用gide4加载gif动态图片。
二、使用方法
1,加载gif动画,同加载普通图片一样,使用如下代码就可以加载gif动画
Glide.with(this).load(...).into(...)
例如:
 ImageView imageView = findViewById(R.id.image_view);
 Glide.with(this)
                // 加载网络图片
                .load("https://image.niwoxuexi.com/blog/content/5c0d4b1972-loading.gif")
                // 加载drawable
//                .load(R.drawable.loading)          
                // 加载assets资源的loading.gif 图片
//                .load("file:///android_asset/loading.gif")    
                .into(imageView);
效果如上图所示,也就是说,不管我们传入的是一张普通图片,还是一张GIF图片,Glide都会自动进行判断,并且可以正确地把它解析并展示出来。
但是如果我想指定加载格式该怎么办呢?就比如说,我希望加载的这张图必须是一张静态图片,我不需要Glide自动帮我判断它到底是静图还是GIF图。
想实现这个功能仍然非常简单,我们只需要再串接一个新的方法就可以了,如下所示:
2, 指定指定加载格式
ImageView imageView = findViewById(R.id.image_view);
        /**
         * 在Glide 4中是先asBitmap() 再load()的
         * 如果写错了顺序就肯定会报错了
         */
        Glide.with(this)
                .asBitmap()    //强制指定加载静态图片
//                .asGif()    //强制指定加载动态图片 
//                .asFile()       //强制指定文件格式的加载 
//                .asDrawable()    //强制指定Drawable格式的加载
                .load("https://image.niwoxuexi.com/blog/content/5c0d4b1972-loading.gif")
                .into(imageView);可以看到,这里在with()方法的后面加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。如果你传入的还是一张GIF图的话,Glide会展示这张GIF图的第一帧,而不会去播放它。
注意:如果加载的图片不是gif,则asGif()会报错, 当然,asGif()不写也是可以正常加载的。
3, 最后上一段先对完整的代码
private void loadGif(ImageView imageView){
    RequestOptions options = new RequestOptions()
            .placeholder(R.drawable.holder)
            .error(R.drawable.error);
    Glide.with(this)
            .load("https://image.niwoxuexi.com/blog/content/5c0d4b1972-loading.gif")
            .apply(options)
            .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    return false;
                }
                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    return false;
                }
            })
            .into(imageView);
}