列表中使用Picasso加载图片滑动列表时加载效率优化解决滑动卡顿问题
2018-01-29 17:15
736 查看
1、ListView优化:
重新自定义ScrollListener并设置滑动事件
mListView.setOnScrollListener(new ScrollListenerListView(this));
自定义的ScrollListener如下:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.widget.AbsListView;
import com.manyiaby.view.viewutils.LogUtil;
import com.squareup.picasso.Picasso;
/**
* 列表滚动时Picasso暂停加载停止滚动时恢复加载事件
* Created by ${cd} on 2018/1/29.
*/
public class ScrollListenerListView implements AbsListView.OnScrollListener{
private String TAG = getClass().getSimpleName();
private final Context context;
}
2、RecyclerView优化:
重新自定义ScrollListener并设置滑动事件
mRecyclerView.addOnScrollListener(new ScrollListenerRecyclerView(this));
自定义的ScrollListener如下:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import com.manyiaby.view.viewutils.LogUtil;
import com.squareup.picasso.Picasso;
import static android.support.v7.widget.RecyclerView.SCROLL_STATE_SETTLING;
/**
* 列表滚动时Picasso暂停加载停止滚动时恢复加载事件
* Created by ${cd} on 2018/1/29.
*/
public class ScrollListenerRecyclerView extends RecyclerView.OnScrollListener{
private String TAG = getClass().getSimpleName();
private final Context context;
}
补充:
1、注意ListView中和RecyclerView中的设置方法不同
ListView:setOnScrollListener
RecyclerView:addOnScrollListener
2、ListView中和RecyclerView的自定义ScrollListener不同
ListView:ScrollListenerListView implements AbsListView.OnScrollListener
RecyclerView:ScrollListenerRecyclerView extends RecyclerView.OnScrollListener
ListView重写ScrollListener需要实现OnScrollListener接口(这个可以由源码验证)
RecyclerView重写ScrollListener需要继承抽象类OnScrollListener(这个可以由源码验证)
重新自定义ScrollListener并设置滑动事件
mListView.setOnScrollListener(new ScrollListenerListView(this));
自定义的ScrollListener如下:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.widget.AbsListView;
import com.manyiaby.view.viewutils.LogUtil;
import com.squareup.picasso.Picasso;
/**
* 列表滚动时Picasso暂停加载停止滚动时恢复加载事件
* Created by ${cd} on 2018/1/29.
*/
public class ScrollListenerListView implements AbsListView.OnScrollListener{
private String TAG = getClass().getSimpleName();
private final Context context;
/** * 列表滚动时Picasso暂停加载停止滚动时恢复加载事件 * @param context */ public ScrollListenerListView(Context context) { this.context = context; } /** * @param view e.g:ListView * @param scrollState * 0(SCROLL_STATE_IDLE)表示ListView是不动的(The AbsListView is not currently scrolling.) * 1(SCROLL_STATE_DRAGGING)表示ListView正在被拖拽(The AbsListView is currently being dragged by outside input such as user touch input.) * 2(SCROLL_STATE_SETTLING)表示ListView正在惯性下滚动(The AbsListView is currently animating to a final position while not under outside control.) */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { LogUtil.i(TAG,"=====" + scrollState); final Picasso picasso = Picasso.with(context); if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) { picasso.resumeTag(context);//在停止滚动/正在滚动的时候调用,停止滚动时恢复图片加载 } else { picasso.pauseTag(context);//列表滑动的时候调用,停止加载图片 } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // Do nothing. }
}
2、RecyclerView优化:
重新自定义ScrollListener并设置滑动事件
mRecyclerView.addOnScrollListener(new ScrollListenerRecyclerView(this));
自定义的ScrollListener如下:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import com.manyiaby.view.viewutils.LogUtil;
import com.squareup.picasso.Picasso;
import static android.support.v7.widget.RecyclerView.SCROLL_STATE_SETTLING;
/**
* 列表滚动时Picasso暂停加载停止滚动时恢复加载事件
* Created by ${cd} on 2018/1/29.
*/
public class ScrollListenerRecyclerView extends RecyclerView.OnScrollListener{
private String TAG = getClass().getSimpleName();
private final Context context;
/** * 列表滚动时Picasso暂停加载停止滚动时恢复加载事件 * @param context */ public ScrollListenerRecyclerView(Context context) { this.context = context; } /** * @param recyclerView * @param scrollState * 0(SCROLL_STATE_IDLE)表示recyclerView是不动的(The recyclerView is not currently scrolling.) * 1(SCROLL_STATE_DRAGGING)表示recyclerView正在被拖拽(The recyclerView is currently being dragged by outside input such as user touch input.) * 2(SCROLL_STATE_SETTLING)表示recyclerView正在惯性下滚动(The recyclerView is currently animating to a final position while not under outside control.) */ @Override public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) { super.onScrollStateChanged(recyclerView,scrollState); LogUtil.i(TAG,"=====" + scrollState); final Picasso picasso = Picasso.with(context); if(scrollState == SCROLL_STATE_SETTLING){ picasso.pauseTag(context);//列表滑动的时候调用,停止加载图片 }else{ picasso.resumeTag(context);//在停止滚动/正在滚动的时候调用,停止滚动时恢复图片加载 } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); }
}
补充:
1、注意ListView中和RecyclerView中的设置方法不同
ListView:setOnScrollListener
RecyclerView:addOnScrollListener
2、ListView中和RecyclerView的自定义ScrollListener不同
ListView:ScrollListenerListView implements AbsListView.OnScrollListener
RecyclerView:ScrollListenerRecyclerView extends RecyclerView.OnScrollListener
ListView重写ScrollListener需要实现OnScrollListener接口(这个可以由源码验证)
RecyclerView重写ScrollListener需要继承抽象类OnScrollListener(这个可以由源码验证)
相关文章推荐
- 在使用Recyclerview加载列表圆形图片时出现的滑动卡顿及图片混乱问题
- 解决Picasso占用内存,使用Picasso在加载超过2M左右的图片时完全不能显示图片问题(不同的手机可能不同)
- 解决在Win7下使用schtasks命令显示 “错误:无法加载列表资源” 的问题
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)
- Android Listview 加载图片优化--本地加载大量图片,解决滑动卡顿现象(滑动停止加载图片)
- 解决ListView滑动时卡的问题,实现异步加载图片解决
- Android有效解决加载大图片内存溢出问题及优化虚拟机内存
- FckEditor使用时遇到的两个问题,未能加载xxxx和上传图片无响应的解决方法
- Listview异步加载缓存图片,解决快速滑动问题
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)
- android使用异步加载解决图片内存溢出问题
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)
- 使用JQuery解决图片自适应大小问题(比较好的解决图片从加载到完全显示的大小问题)
- Android Listview 加载图片优化--本地加载大量图片,解决滑动卡顿现象(滑动停止加载图片)
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- 转!Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)
- Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)