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);
}
});
In my case, I solved the issue by using defined dimensions on my imageView.
<ImageView
android:id="@+id/poster_imageview"
android:layout_width="130dp"
android:layout_height="183dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/placeholder" />
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);
}
Also don't forget to setHasStableIds(true); in your adapter and properly override getItemId() method.
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()
来源:https://stackoverflow.com/questions/37944860/why-glide-blink-the-item-imageview-when-notifydatasetchanged