Glide4-入门教程-4-加载gif图片

作者: android 发布时间: 2018-02-09 浏览: 12680 次 编辑

一、简介

    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);

}