最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
NestedScrollView+Recyclerview下滑卡顿解决方法
时间:2022-06-25 23:12:32 编辑:袖梨 来源:一聚教程网
大家在进行安卓开发用到NestedScrollView+Recyclerview的时候,经常出现的情况就是加载下滑的时候没有任何问题,很流畅,但是在下滑以后明显出现了卡顿的情况,小编根绝这个问题,给大家再来的解决方法,一起来学习下。
我们先来看下这个BUG的表现:
1.滑动卡顿,
2.加载下滑时流畅,下滑时明显的卡顿
3.进入页面时直接加载RecyclerView部分的内容(这里我理解为控件惯性,不知道对不对-------尴尬!!!!!!)
下面我们一一来解决这些问题
在开发项目中,涉及到到商品详情页,新闻详情页等的页面时,通常情况下,商品详情页的底部会附上商品的评论或者是相关商品的的推荐,或者是相关性的文章.那么我们就会用到列表的RecyclerView,在头部可能是一些比较复杂的多种界面,可能采用比较简单的方法来处理,那就是NestedScrollView+Recyclerview,这这种方式比较直观和方便操作.比如像下面的代码
.....此处省略
首先.滑动动卡顿的问题.
在布局文件中添加
android:nestedScrollingEnabled="false"
这一属性
或者通过代码设置也是可以的,
mRecycler.setNestedScrollingEnabled(false);
这样滑动的时候就不会出现有卡顿的现象.
其次是加载上下滑动加载流畅时
通过代码
mRecycler.setHasFixedSize(false);
对于第三种现象,我找了很多方法,都以失败而告终,其实出现这种情况是应为Recyclerview在加载数据的时候获取到了焦点导致,所
以只需要在对RecylerView在带中设置不能获取焦点即可.
添加以下代码
mRecycler.setFocusable(false);
以上是小编测试过的解决方法,接下来,我们再给大家分享一篇简单的方法代码:
最开始使用ScrollView的时候嵌套ListView会出现item显示不全等一些问题,现在google提供NestedScrollView已经可以解决该问题,但是在使用NestedScrollView嵌套RecyclerView的时候会发现我们在RecyclerView上滑动的时候没有了滚动的效果,查看文档找到的解决办法:
LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setSmoothScrollbarEnabled(true); layoutManager.setAutoMeasureEnabled(true); recyclerView.setLayoutManager(layoutManager); recyclerView.setHasFixedSize(true); recyclerView.setNestedScrollingEnabled(false);
就在小编完稿的时候,又发现了两种方法,大神真的是多啊,一起整理后分享给你
当ScrollView嵌套RecyclerView时,会出现滑动卡顿,不平滑的效果。对此有两种解决方案。
方案一
设置RecyclerView属性方法
recyclerView.setHasFixedSize( true); recyclerView.setNestedScrollingEnabled(false);
或者直接在recycleview中 添加属性
android:nestedScrollingEnabled="false"
方案二
如果方案一无效,不妨试试重写ScrollView的onInterceptTouchEvent()方法,强制让其触摸事件都交给其子控件去处理
public class RecycleScrollView extends ScrollView { private int downX; private int downY; private int mTouchSlop; public RecycleScrollView(Context context) { super(context); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public RecycleScrollView(Context context, AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public RecycleScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } @Override public boolean onInterceptTouchEvent(MotionEvent e) { int action = e.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: downX = (int) e.getRawX(); downY = (int) e.getRawY(); break; case MotionEvent.ACTION_MOVE: int moveY = (int) e.getRawY(); if (Math.abs(moveY - downY) > mTouchSlop) { return true; } } return super.onInterceptTouchEvent(e); } }
通过以上操作,界面就不会再卡顿了,还原了原本的惯性。
相关文章
- 《燕云十六声》红尘无眼完成图文攻略 12-25
- 《燕云十六声》阴阳如影完成图文攻略 12-25
- 《燕云十六声》悬檐之下四架椽屋图文攻略 12-25
- 《燕云十六声》2024最新公测时间介绍 12-25
- 《燕云十六声》有没有藏宝阁 12-25
- 《燕云十六声》制作公司介绍 12-25