android Glide用法(二)

一  . 基本使用方法

1.添加依赖

compile 'com.github.bumptech.glide:glide:3.7.0'

2.添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

3.使用

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView  iv = (ImageView)findViewById(R.id.iv);
        String   url = "https://img.gcall.com/dca5/M00/10/8E/wKhoNlggetaENWylAAAAAAAAAAA457.jpg";
        //加载图片
        Glide.with(MainActivity.this).load(url).into(iv);
    }

}

4.设置占位图(placeholder)

有时候加载的图片过大时,或者网络不好时,我们经常希望控件在加载过程中有一张默认的占位图

Glide.with(this).load(url).placeholder(R.mipmap.place).into(iv);

5.设置错误图片(error)

当图片链接地址有误或者网络不行的时候,我们需要显示一个错误图片 

Glide.with(this).load(url).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(iv);

6.设置动画(crossFade)

Glide默认是包含淡入淡出动画的时间为300ms(毫秒),我们可以修改这个动画的时间

Glide.with(this).load(url).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).crossFade(5000).into(iv);
  • 7.取消动画(dontAnimate)

当我们不希望有淡入淡出动画时

Glide.with(this).load(url).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).dontAnimate().into(iv);

    

二 . 加载本地图片

1.在清单文件中增加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2.加载

其实Glide加载本地图片和加载网络图片调用的方法是一样的,唯一的区别是说加载SD卡的图片需要SD卡的权限,加载网络需要网络权限

    //本地文件
    File file = new File(Environment.getExternalStorageDirectory(), "xiayu.png");
    //加载图片
    Glide.with(this).load(file).into(iv);


三 . Glide-加载Gif

1.简单加载

如果只是简单加载gif,其实跟加载普通图片一样

Glide.with(this).load(mGifUrl).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

2.把gif当作普通图片加载(asBitmap)

如果希望加载gif时只加载gif的第一帧,把gif当作普通图片一样加载,那么只需要加上asBitmap方法即可

Glide.with(this).load(mGifUrl).asBitmap().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
  • 1
  • 2

3.检查是否gif(asGif)

如果你希望加载的只是gif,如果不是gif就显示错误图片,那么只用加上asGif方法即可

 Glide.with(this).load(mGifUrl).asGif().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

4.加载本地视频缩略图

网络上很多文章上都是从一篇译文里面拷贝过来的,里面说Glide可以加载本地视频,但是那篇译文漏翻译一句了,Glide只会加载本地视频的第一帧,也就是缩略图,而且其实加载缩略图的时候也无需转化为Uri,直接把File丢进去就行了

    mVideoFile = new File(Environment.getExternalStorageDirectory(), "xiayu.mp4");

    Glide.with(this).load(mVideoFile).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

5.其他

在大多数情况下,当你使用diskCacheStrategy(DiskCacheStrategy.SOURCE)时,Gif的加载速度会显着提高(其实就是把gif资源缓存到磁盘)

Glide.with(this).load(mGifUrl).diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);

三 . Glide-内存缓存与磁盘缓存

1.缓存的资源

Glide的缓存资源分为两种:

  • 1.原图(SOURCE) :原始图片
  • 2.处理图(RESULT) :经过压缩和变形等处理后的图片

2.内存缓存策略(skipMemoryCache)

Glide默认是会在内存中缓存处理图(RESULT)的.

可以通过调用skipMemoryCache(true)来设置跳过内存缓存

    //跳过内存缓存
    Glide.with(this).load(mUrl).skipMemoryCache(true).into(mIv);

调用skipMemoryCache(false)没有代码上的意义,因为Glide默认就是不跳过内存缓存的,但是显示调用这个方法,可以让别人一目了然的知道你这次请求是会在内存中缓存的,所以还是建议显示调用一下这个方法来表明你的内存缓存策略

3.磁盘缓存策略(diskCacheStrategy)

Glide磁盘缓存策略分为四种,默认的是RESULT(默认值这一点网上很多文章都写错了,但是这一点很重要):

  • 1.ALL:缓存原图(SOURCE)和处理图(RESULT)

  • 2.NONE:什么都不缓存

  • 3.SOURCE:只缓存原图(SOURCE)

  • 4.RESULT:只缓存处理图(RESULT)  —默认值

4.组合策略

和其他三级缓存一样,Glide的缓存读取顺序是 内存–>磁盘–>网络

需要注意的是Glide的内存缓存和磁盘缓存的配置相互没有直接影响,所以可以同时进行配置

例:

1.内存不缓存,磁盘缓存缓存所有图片

Glide.with(this).load(mUrl).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.ALL).into(mIv);

2.内存缓存处理图,磁盘缓存原图

Glide.with(this).load(mUrl).skipMemoryCache(false).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mIv);

5.缓存大小及路径

5.1内存缓存最大空间

Glide的内存缓存其实涉及到比较多的计算,这里就介绍最重要的一个参数,就是内存缓存最大空间

内存缓存最大空间(maxSize)=每个进程可用的最大内存 * 0.4

(低配手机的话是: 每个进程可用的最大内存 * 0.33)

5.2磁盘缓存大小

磁盘缓存大小: 250 * 1024 * 1024(250MB)

/** 250 MB of cache. */
    int DEFAULT_DISK_CACHE_SIZE = 250 * 1024 * 1024;

5.3磁盘缓存目录

磁盘缓存目录: 项目/cache/image_manager_disk_cache

    String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";

6.清除缓存

6.1清除所有缓存

清除所有内存缓存(需要在Ui线程操作)

Glide.get(this).clearMemory();
  • 清除所有磁盘缓存(需要在子线程操作)
Glide.get(MainActivity.this).clearDiskCache();

注:在使用中的资源不会被清除





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值