Android ListView,GridView,RecyclerView图片加载错位闪动问题解决办法

最近看了一下RecyclerView这个控件,的确非常好用,但是也并没有摆脱这种问题,recyclerview内部好像自带有控件的复用。
问题的根源还是控件的复用以及异步加载所引起的问题
解决思路:
1.使用缓存,从缓存中加载的速度大大少于从网络加载
2.设置默认图片,当一个item设置个图片然后被复用,而当前显示的图片还没有数据,正在从网络获取,这个时候此item就会显示复用前显示的图片,而当前应该显示的图片从网络中获取到之后就会重新加载上去就出现的图片闪动的情况
3.给ImageView设置TAG

我封装了一个类来进行网络获取加载图片,代码比较简单,用起来也非常方便,诸位可以根据自己的需求进行修改
话不多说上代码:

package My.Utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.util.Log;
import android.util.LruCache;
import android.widget.ImageView;

import com.wkk.myutils.R;

import java.io.IOException;

/**
 * Created by Think on 2016/4/11.
 */
public class ImageLoader {

    private static My.Utils.ImageLoader ImageLoader;
    private LruCache<String, Bitmap> lruCache;
    public static final int ID = -100;
    private boolean Savedlocal = false;//此属性控制是否需要缓存到本地
    private Context context;

  @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
    private ImageLoader(Context context) {
        this.context = context;
        // 版本低于12 数量 大于等于12 容量
        if (Build.VERSION.SDK_INT < 12) {
            lruCache = new LruCache<String, Bitmap>(100);
        } else {
            lruCache = new LruCache<String, Bitmap>(5 * 1024 * 1024) {
                @Override
                protected int sizeOf(String key, Bitmap value) {
                    return value.getByteCount();
                }
            };
        }
    }

    public static My.Utils.ImageLoader getInstance(Context context) {
        if (ImageLoader == null) {
            ImageLoader = new ImageLoader(context);
        }
        return ImageLoader;
    }

    /**
     * 对外开放方法
     * 1.需要设置的Imageview
     * 2.图片的URl
     * 3.默认图片
     */
    public void 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值