NestedScrollView+Recyclerview下滑卡頓解決方法
大家在進行安卓開發(fā)用到NestedScrollView+Recyclerview的時候,經(jīng)常出現(xiàn)的情況就是加載下滑的時候沒有任何問題,很流暢,但是在下滑以后明顯出現(xiàn)了卡頓的情況,小編根絕這個問題,給大家再來的解決方法,一起來學習下。
我們先來看下這個BUG的表現(xiàn):
1.滑動卡頓,
2.加載下滑時流暢,下滑時明顯的卡頓
3.進入頁面時直接加載RecyclerView部分的內(nèi)容(這里我理解為控件慣性,不知道對不對-------尷尬!!!!!!)
下面我們一一來解決這些問題
在開發(fā)項目中,涉及到到商品詳情頁,新聞詳情頁等的頁面時,通常情況下,商品詳情頁的底部會附上商品的評論或者是相關(guān)商品的的推薦,或者是相關(guān)性的文章.那么我們就會用到列表的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);
這樣滑動的時候就不會出現(xiàn)有卡頓的現(xiàn)象.
其次是加載上下滑動加載流暢時
通過代碼
mRecycler.setHasFixedSize(false);
對于第三種現(xiàn)象,我找了很多方法,都以失敗而告終,其實出現(xiàn)這種情況是應為Recyclerview在加載數(shù)據(jù)的時候獲取到了焦點導致,所
以只需要在對RecylerView在帶中設置不能獲取焦點即可.
添加以下代碼
mRecycler.setFocusable(false);
以上是小編測試過的解決方法,接下來,我們再給大家分享一篇簡單的方法代碼:
最開始使用ScrollView的時候嵌套ListView會出現(xiàn)item顯示不全等一些問題,現(xiàn)在google提供NestedScrollView已經(jīng)可以解決該問題,但是在使用NestedScrollView嵌套RecyclerView的時候會發(fā)現(xiàn)我們在RecyclerView上滑動的時候沒有了滾動的效果,查看文檔找到的解決辦法:
LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setSmoothScrollbarEnabled(true); layoutManager.setAutoMeasureEnabled(true); recyclerView.setLayoutManager(layoutManager); recyclerView.setHasFixedSize(true); recyclerView.setNestedScrollingEnabled(false);
就在小編完稿的時候,又發(fā)現(xiàn)了兩種方法,大神真的是多啊,一起整理后分享給你
當ScrollView嵌套RecyclerView時,會出現(xiàn)滑動卡頓,不平滑的效果。對此有兩種解決方案。
方案一
設置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);
}
}
通過以上操作,界面就不會再卡頓了,還原了原本的慣性。
以上就是關(guān)于NestedScrollView+Recyclerview下滑卡頓的所有方法,希望我們整理的東西能夠真正幫助到你,喜歡的話就收藏一下吧。
相關(guān)文章
android 限制某個操作每天只能操作指定的次數(shù)(示例代碼詳解)
這篇文章主要介紹了android 限制某個操作每天只能操作指定的次數(shù),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Android自定義view實現(xiàn)動態(tài)柱狀圖
這篇文章主要為大家詳細介紹了Android自定義view實現(xiàn)動態(tài)柱狀圖的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
Android Location服務之LocationManager案例詳解
這篇文章主要介紹了Android Location服務之LocationManager案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08
android Setting中隱藏項實現(xiàn)原理與代碼
我們都知道做程序員有時會就像android中,程序員在setting中就隱藏這樣一項,接下來將詳細介紹,感興趣的朋友可以了解下哦2013-01-01
安裝android開發(fā)環(huán)境原始版(windows版)
安裝android開發(fā)環(huán)境原始版(windows版)的詳細步驟2013-03-03
Android 中動態(tài)加載.jar的實現(xiàn)步驟
本文介紹動態(tài)加載 .jar的實現(xiàn)步驟,這將對你的android開發(fā)很有幫助,剛興趣的朋友可以了解下哦2013-01-01
Android+Flutter實現(xiàn)文字跑馬燈特效
跑馬燈常常被運用在很多領(lǐng)域, 例如商場的電子條幅、大樓的宣傳廣告位、地鐵的廣告位。今天我們來說一下flutter 怎么通過繪制來實現(xiàn)跑馬燈效果!,希望對大家有所幫助2022-11-11

