使用Glide的一个优化


使用Glide的一个优化

Glide.with(context).resumeRequests();
Glide.with(context).pauseRequests();

可以借鉴

滚动加载,不滚动时不加载,提高listview效率
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState){
        case SCROLL_STATE_FLING:
            Log.i("ListView","用户在手指离开屏幕之前,由于滑了一下,视图仍然依靠惯性继续滑动");
            Glide.with(getApplicationContext()).pauseRequests();
            //刷新
            break;
        case SCROLL_STATE_IDLE:
            Log.i("ListView", "视图已经停止滑动");
            Glide.with(getApplicationContext()).resumeRequests();
            break;
        case SCROLL_STATE_TOUCH_SCROLL:
            Log.i("ListView","手指没有离开屏幕,视图正在滑动");
            Glide.with(getApplicationContext()).resumeRequests();
            break;
    }

}
借鉴:http://blog.csdn.net/libra_louis/article/details/55517568

因为Adapter对View的复用以及图片网络请求的耗时问题有时候在快速滑动且网络不佳的情况下会出现图片加载错乱。 
即滑动到屏幕内发出网络请求,但并未请求完成就已滑出屏幕,待到请求完成时,就加载到了其它ItemView上。

但是当我们使用Glide做图片加载的时候这么设置会出现You must not call setTag() on a view Glide is targeting 错误提示。 此时我们只需要通过setTag(key,object)来进行设置即可:

String title = dataBean.getTitle();
        String uri = dataBean.getThumbnail_pic_s();
        holder.mImgContentItem.setTag(R.id.imageid,uri);
        if(holder.mImgContentItem.getTag(R.id.imageid)!=null&&uri==holder.mImgContentItem.getTag(R.id.imageid)){
            Glide.with(mContext).load(uri).into(holder.mImgContentItem);
            holder.mTextContentItem.setText(title);
        }
  
  
  • 1
  • 2
  • 3
  • 5
  • 6

注意:setTag内第一个参数key,必须是resource资源,只需在res-value内建立一个ids.xml即可,内部代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="imageid" type="id"/>
</resources>
  
  
  • 1
  • 2
  • 3
然后就可以通过R.id进行引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值