NestedScrollView+Recyclerview下滑卡顿解决方法

NestedScrollView+Recyclerview下滑卡顿解决方法,第1张

概述大家在进行安卓开发用到NestedScrollView+Recyclerview的时候,经常出现的情况就是加载下滑的时候没有任何问题,很流畅,但是在下滑以后明显出现了卡顿的情况,小编根绝这个问题,给大家再来的解决方法,一起来学习下

大家在进行安卓开发用到nestedScrollVIEw+RecyclervIEw的时候,经常出现的情况就是加载下滑的时候没有任何问题,很流畅,但是在下滑以后明显出现了卡顿的情况,小编根绝这个问题,给大家再来的解决方法,一起来学习下。

我们先来看下这个BUG的表现:
1.滑动卡顿,
2.加载下滑时流畅,下滑时明显的卡顿
3.进入页面时直接加载RecyclerVIEw部分的内容(这里我理解为控件惯性,不知道对不对-------尴尬!!!!!!)
下面我们一一来解决这些问题

在开发项目中,涉及到到商品详情页,新闻详情页等的页面时,通常情况下,商品详情页的底部会附上商品的评论或者是相关商品的的推荐,或者是相关性的文章.那么我们就会用到列表的RecyclerVIEw,在头部可能是一些比较复杂的多种界面,可能采用比较简单的方法来处理,那就是nestedScrollVIEw+RecyclervIEw,这这种方式比较直观和方便 *** 作.比如像下面的代码

<?xml version="1.0" enCoding="utf-8"?><androID.support.v4.Widget.nestedScrollVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" androID:ID="@+ID/scrollVIEw_comment" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" > <linearLayout  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:orIEntation="vertical"> .....此处省略    <linearLayout   androID:layout_wIDth="match_parent"   androID:layout_height="44dp"   androID:gravity="center">   <linearLayout    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content">    <ImageVIEw     androID:layout_wIDth="20dp"     androID:layout_height="20dp"     androID:src="@color/text_msg_33"/>    <TextVIEw     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:layout_marginleft="12dp"     androID:layout_marginRight="12dp"     androID:text="1"     androID:textcolor="#8c8c8c"     androID:textSize="15sp"/>    <ImageVIEw     androID:layout_wIDth="20dp"     androID:layout_height="20dp"     androID:src="@color/text_msg_33"/>   </linearLayout>   <TextVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="20dp"    androID:layout_marginRight="10dp"    androID:background="@drawable/bg_shop_card"    androID:gravity="center"    androID:paddingleft="8dp"    androID:paddingRight="8dp"    androID:text="加入购物车"    androID:textcolor="@color/white"    androID:textSize="14sp"/>  </linearLayout>  <VIEw   androID:layout_wIDth="match_parent"   androID:layout_height="10dp"   androID:background="#f2f2f2"/>  <linearLayout   androID:layout_wIDth="match_parent"   androID:layout_height="35dp"   androID:gravity="center_vertical">   <TextVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_marginleft="11dp"    androID:text="用户评价"    androID:textcolor="#666666"    androID:textSize="13sp"/>   <TextVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_marginleft="@dimen/line_1px"    androID:layout_marginRight="20dp"    androID:text="(21313)"    androID:textcolor="#666666"    androID:textSize="13sp"/>  </linearLayout>  <VIEw   androID:layout_wIDth="match_parent"   androID:layout_height="0.5dp"   androID:background="#dcdcdc"/>  <androID.support.v7.Widget.RecyclerVIEw   androID:ID="@+ID/recycler_seller_comment"   androID:layout_wIDth="match_parent"   androID:layout_height="match_parent"   androID:descendantFocusability="blocksDescendants"   androID:nestedScrollingEnabled="false"   />  <TextVIEw   androID:layout_wIDth="wrap_content"   androID:layout_height="wrap_content"   androID:text="查看更多"   androID:textcolor="#8c8c8c"   androID:textSize="13sp"/> </linearLayout></androID.support.v4.Widget.nestedScrollVIEw>

首先.滑动动卡顿的问题.

在布局文件中添加

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();}@OverrIDepublic 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);}}

通过以上 *** 作,界面就不会再卡顿了,还原了原本的惯性。

以上就是关于nestedScrollVIEw+RecyclervIEw下滑卡顿的所有方法,希望我们整理的东西能够真正帮助到你,喜欢的话就收藏一下吧。

总结

以上是内存溢出为你收集整理的NestedScrollView+Recyclerview下滑卡顿解决方法全部内容,希望文章能够帮你解决NestedScrollView+Recyclerview下滑卡顿解决方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143752.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存