RecycleView 滑动优化
来源:互联网 发布:java线程池的使用示例 编辑:程序博客网 时间:2024/04/28 03:54
在RecycleView设置是否滚动变量,然后在滚动监听器的onScrollStateChanged()方法中给boolean值赋值,看是否在滚动。
这样在我们使用这个适配器的时候,就可以根据滚动状态的不同来判断:比如正在滚动的时候就只显示内存缓存的图片,如果内存缓存中没有就显示一张默认图片;而如果没有在滚动就采用正常的图片加载方案去加载网络或者缓存中的图片。同理,影响RecycleView滑动性能的耗时操作都可以采用这种策略,滚动的时候不进行耗时操作,停止的时候才进行,注意在onScrollStateChanged当停止后需要刷新RecycleView。
ContactListView:
private boolean mIsScrolling = false;//监听是否滚动
mRecyclerView = (RecyclerView) findViewById(R.id.contact_list);mRecyclerView.setHasFixedSize(true);
mLinearLayoutManager = new WrapContentLinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);mRecyclerView.setLayoutManager(mLinearLayoutManager);mAdapter = new ContactListAdapter(this);mRecyclerView.setAdapter(mAdapter);mRecyclerView.addOnScrollListener(new ScrollListener());private class ScrollListener extends OnScrollListener{ @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); LogF.e("aa1","newState:"+newState); if(newState == RecyclerView.SCROLL_STATE_SETTLING){ //屏幕惯性滚动 mIsScrolling = true; }else if(newState == RecyclerView.SCROLL_STATE_DRAGGING){ //手指触摸滚动 mIsScrolling = false; }else{//这个idle状态在数据刷新后再调用,导致无法及时更新,所以在这调用多一次notifydatachange mIsScrolling = false; mAdapter.notifyDataSetChanged(); /* int firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); int lastVisibleItem = mLinearLayoutManager.findLastVisibleItemPosition(); mAdapter.notifyItemRangeChanged(firstVisibleItem,lastVisibleItem - firstVisibleItem);*/ } }
ContactListAdapter:
ContactListView mContactListView;ViewHolderItemClickListener mViewHolderItemClickListener;//item点击事件public ContactListAdapter(ContactListView contactListView) { RcsCapHelper.getInstance().addRcsCapNotifyListener(this); mContactListView = contactListView;}if(mContactListView.isScrolling()){ //滑动只读缓存头像 String phone = mCurrentContact.getNumber(); Log.e("aa1","is scrolling:"+mCurrentContact.getName());//读取缓存,若没有则显示默认 loadPhotoFromCache(mcontactImage, mCurrentContact.getNumber());}else{ //采用glide读取头像,缓存没有读取网络 Log.e("aa1","not scrolling :"+mCurrentContact.getName()); loadPhoto(App.getAppContext(), mcontactImage, mCurrentContact.getNumber());}
0 0
- RecycleView 滑动优化
- ListView嵌套RecycleView滑动卡顿问题的优化方案
- 横向滑动的Recycleview
- RecycleView 禁止滑动
- recycleView保持流畅滑动
- 解决RecycleView嵌套RecycleView滑动冲突问题
- recycleView滑动删除,拖动排序
- RecycleView横向滑动item变大
- recycleView滑动删除,拖动排序
- Android 禁止RecycleView的滑动
- viewPager + recycleView 实现左右滑动
- Android 禁止RecycleView的滑动
- RecycleView设置横向滑动图片
- RecycleView-ListView优化
- 学习笔记之——RecycleView替换优化HorizontalScrollView嵌套HorizontalListView实现手势监听、按钮监听滑动功能
- 解决scrollview嵌套recycleview,recycleview抢走滑动事件的问题
- RecycleView水波纹 以及RecycleView的滑动动画
- ScrllView嵌套RecycleView时ScrllView不随着RecycleView滑动解决方案
- 【DP】洛谷 P1508 Likecloud-吃、吃、吃
- java动态代理
- Ubuntu下对PyCharm-2016.3.2的长期使用
- Eclipse常用设置
- 监听鼠标移动和点击事件并且通过发送广播的形式发出这个绝对坐标
- RecycleView 滑动优化
- 八大排序算法
- dom解析xml
- NoteExpress毕业设计文献管理学习笔记
- Java多线程——实现线程的方式以及线程的状态
- webuploader在ie8上传失效
- 【DP】洛谷 P1510 精卫填海
- Layui前端框架导航栏使用介绍
- linux常用指令