在旋转(方向改变)时第一次滑动不从存储器加载图像,之后从存储器加载

问题描述 投票:4回答:6

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

我试图增加内存大小,位图池大小,各种缓存策略......似乎没什么用......

我附上了一段视频。

https://youtu.be/szDnAGxrJLU

谢谢!

android image-loading android-glide
6个回答
3
投票

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


2
投票

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

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

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

        Glide.with(context)
             .load(imgUrl)
             .crossFade()
             .override(imageWidth,imageHeight)
             .into(imgView);

0
投票

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

您可以使用下面的滑动并保持不动画方法,因为它有助于在适配器中加载图像而不更新完整列表。有关更多信息,请查看this

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

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


0
投票

.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()来解决问题。

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


-2
投票

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

以下代码段可以帮助您:

 Glide.with(context)
         .load(imgUrl)
         .crossFade()
         .override(imageWidth,imageHeight).error(R.drawable.yourdrawable)
         .into(imgView);
© www.soinside.com 2019 - 2024. All rights reserved.