初探Glide,Google推介的图片缓存库

0 .Thanks

项目地址
Android Glide图片加载(加载监听、加载动画)
【Glide】重新加载图片

---导入:2017年2月15日19:06:06

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:3.7.0'
  compile 'com.android.support:support-v4:19.1.0'
}

1 .基本用法

Glide
    .with( context )
    .placeholder(R.drawable.loading)
    .error(R.drawable.failed)
    .load( eatFoodyImages[0] )
    .into( imageViewInternet );
  • with : 传入Context,最好传入Activity,Glide会根据Activity的生命周期去加载,当Activity Destory的时候,其加载会取消。
  • load : 图片的地址:可以是Drawable, ResId, URL 等等。
  • into : 图片加载的目标。其必须是 .
  • placeholder : 放置一张占位符,也就是在加载进行的时候所显示的
  • error :加载失败显示的图片

2 .设置其缓存策略

在默认情况下,例如上面的请求,Glide默认开启:磁盘缓存,内存缓存。
我们可以控制这个策略:

Glide
    .with( context )
    .placeholder(R.drawable.loading)
    .error(R.drawable.failed)
    .skipMemoryCache( true )
    .diskCacheStrategy( DiskCacheStrategy.NONE )
    .load( eatFoodyImages[0] )
    .into( imageViewInternet );
  • skipMemoryCache : true:设置内存缓存,false:不适用内存缓存
  • diskCacheStrategy :传入的是一个枚举:
  • DiskCacheStrategy.NONE :不缓存图片
  • DiskCacheStrategy.SOURCE :缓存图片源文件
  • DiskCacheStrategy.RESULT:缓存修改过的图片
  • DiskCacheStrategy.ALL:缓存所有的图片,默认

3 .动画

  • 添加图片淡入加载的效果 : .crossFade()
  • 添加自定义动画:
    • .animate( android.R.anim.slide_in_left ) //在图片从网络加载完并准备好之后将从左边滑入。
    • Java代码动画:
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {  
    @Override
    public void animate(View view) {
        // if it's a custom view class, cast it here
        // then find subviews and do the animations
        // here, we just use the entire view for the fade animation
        view.setAlpha( 0f );

        ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
        fadeAnim.setDuration( 2500 );
        fadeAnim.start();
    }
};

然后再Glide中设置: .animate( animationObject )

4 .加载完成监听

Glide.with(ShowImgActivity.this)
     .load(urlString)
     .centerCrop()
     .error(R.drawable.failed)
     .crossFade()
     .into(new GlideDrawableImageViewTarget(imageView) {
        @Override
        public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
            super.onResourceReady(drawable, anim);
            //在这里添加一些图片加载完成的操作
        }
    )};

5 .加载优先级

在Glide的内部,图片的加载可以变得有优先级:
通过:.priority( Priority.HIGH )设置

6 .其他的小问题

1)Glide去加载头像:
  • 使用Glide去加载头像
    在实际项目当中,我遇到一个 问题:

    • 客户端更新头像,方法是:URL不会变,但是图片内容会改变。
      这样,就会在客户端上遗留一个问题:客户端是以URL作为
      图片缓存的key,所以,每次更新头像,而本地的图片却不会
      变,因为URL不变,缓存没有更新。

    • 对于上面的问题,客户端可以采用这样的操作:每次更新完头像
      之后,顺便把头像的缓存给替换一下,OK,这样的话,可以
      更新头像。

    • 然后,我们又发现,会存在另外一个隐患:用户A在手机M,N
      都登陆过,然后,其手机M,N上都缓存这一个相同Key的URL头像,
      而,当用户在手机M上更新了头像,成功了。但是当他在手机N上
      登陆的时候,发现头像还是之前那个。有人说,把图片设置成,每次
      读取都去获取服务器的图片,不做任何缓存。但是,这样,缓存就
      没有意义了。

    • 最终解决方法(综合网上的解法)
      1)服务器接口更改:
      记录每次更新头像的时间:例如有头像:http://xxx/headpic/125.png
      在其更新后,保留其时间戳,拼接到URL后面,以?作为分隔符:
      http://xxx/headpic/125.png?1324564

    这样,每次客户端在获取到这个URL的时候,就直接走缓存策略。
    每次更新的URL,都会改变,而在任何的地方上获取URL都保证是能
    识别到最新的头像URL。

    参考:http://www.codexiu.cn/android/blog/21429/

你可能感兴趣的:(初探Glide,Google推介的图片缓存库)