6

Glide 在旋转(方向改变)时第一次不从内存加载图像,之后从内存加载。

我试图增加内存大小、位图池大小、各种缓存策略......似乎没有任何效果......

我附上了一个视频。

https://youtu.be/szDnAGxrJLU

谢谢!

4

6 回答 6

3

ImageView的 s 在纵向和横向中的大小不完全相同,您可能正在使用fitCenter()centerCrop()将图像调整为该ImageView大小。当您更改方向时,Glide 会从缓存中加载全尺寸图像,但它必须在显示之前先在后台线程上调整它的大小,这就是您在第一次方向更改后看到延迟的原因。在纵向和横向调整大小的图像都在内存缓存中后,不再有延迟。

于 2015-08-26T22:15:17.527 回答
2

.dontAnimate()将此添加到 Glide 解决了我的问题

Glide.with(view.getContext())
            .load(url)
            .placeholder(placeholder_image_crop))
            .dontAnimate()
            .into(view)

您可能会因为以下原因而遇到此问题

CircleImageView/CircularImageView/RoundedImageView已知TransitionDrawable (.crossFade() 与 .thumbnail() 或 .placeholder())和动画存在问题GIFs,请使用BitmapTransformation (.circleCrop() 将在 v4 中提供).dontAnimate()解决问题。

有关更多查询,请参阅以下链接,它可能会对您有所帮助。 链接 1链接 2

于 2019-02-25T04:46:04.677 回答
2

只是为了强调上面写的内容并添加解决方案。

可以更改磁盘缓存策略以缓存源图像,但不能更改内存缓存策略,在这种情况下,除非大小相同,否则不会命中。

我所做的是使用 .override(width,height) 来覆盖此策略并将源图像保留在内存缓存中。

        Glide.with(context)
             .load(imgUrl)
             .crossFade()
             .override(imageWidth,imageHeight)
             .into(imgView);
于 2015-08-26T23:53:26.447 回答
0

要从缓存加载图像,您可以传递DiskCacheStrategy.SOURCE从缓存加载图像。

您可以使用如下所示的 glide 并保留不设置动画方法,因为它有助于在适配器中加载图像而无需更新完整列表。更多检查这个

Glide.with(context)
    .load(row_object.getImage())
    .dontAnimate() // will load image
    .diskCacheStrategy(DiskCacheStrategy.SOURCE)
    .placeholder(ContextCompat.getDrawable(context,
        R.mipmap.ic_user_placeholder_50dp))
    .into(holder.rowIvPostUserIcon);
于 2017-07-14T11:08:45.537 回答
0

这段代码帮助我:

Glide.with(view.getContext())
                .load(url)
                .placeholder(AppCompatResources.getDrawable(view.getContext(), R.drawable.vector_placeholder_vendor_image_crop))
                .dontAnimate()
                .into(view);

//need add .dontAnimate()

欲了解更多信息: https ://github.com/bumptech/glide/issues/1026#issuecomment-191709837

于 2018-07-20T05:59:22.583 回答
-2

第一次滑行无法在圆形 Imageview 等自定义视图上加载图像。您可以使用错误在第一次加载图像。

以下代码段应该对您有所帮助:

 Glide.with(context)
         .load(imgUrl)
         .crossFade()
         .override(imageWidth,imageHeight).error(R.drawable.yourdrawable)
         .into(imgView);
于 2017-07-14T10:57:40.207 回答