I am using Glide 3.7.0 with RecyclerView
. The item view always blinks when refreshing (calling notifyDataSetChanged
).
Here is my code:
Glide
.with(context)
.load(filepath)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.dontAnimate()
.into(imageview);
When I use no cache, the ImageView
has a null Bitmap when notifyDataSetChanged
method is called and Glide hasn't finished loading the bitmap.
If I use the code below:
Glide
.with(context)
.load(filepath)
.dontAnimate()
.into(imageview);
Then the item ImageView
does not blink anymore (using cache).
I want to update the item view dynamically, so I disable the glide cache.
Are there any solutions to solve this blink bug?
Thank you very much!
After my many tries, just use SimpleTarget solved my problem thank you!
Glide
.with(context)
.load(filepath)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.dontAnimate()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap arg0, GlideAnimation<? super Bitmap> arg1) {
// TODO Auto-generated method stub
holder.mItemView.setImageBitmap(arg0);
}
});
Update Glide from version 3 to 4 and setSupportsChangeAnimations(false)
for RecyclerView solved problem for me
RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator();
if (animator instanceof SimpleItemAnimator) {
((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
}
since SimpleTarget
is deprecated try this solution:
GlideApp.with(SOMETHING)
.load("WHAT")
.dontAnimate()
.let { request ->
if(imageView.drawable != null) {
request.placeholder(imageView.drawable.constantState?.newDrawable()?.mutate())
} else {
request
}
}
.into(imageView)
you can also create nice extension for drawable to make REAL copy:
import android.graphics.drawable.Drawable
fun Drawable.copy() = constantState?.newDrawable()?.mutate()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With