在android中的nestedscrollview中使用3个recyclerviews时滚动不顺畅

时间:2016-07-19 10:54:16

标签: android android-layout android-viewpager android-recyclerview android-coordinatorlayout

我在一个布局文件中有三个recyclerviews,它们具有水平对齐的布局管理器,这些recyclerviews在nestedscrollview中,我也将三个recyclerviews中的每一个的嵌套滚动设置为false。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/frameLayout"
    android:background="@drawable/background">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="5dp"
                        android:text="FREE MOVIES"
                        android:textStyle="bold"
                        android:textSize="18sp"
                        android:textColor="@color/colorAccent"
                         />
                    <view
                        android:id="@+id/recycler_view"
                        class="android.support.v7.widget.RecyclerView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_centerInParent="true" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:orientation="vertical">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:text="PREMIUM MOVIES"
                    android:textColor="@color/colorAccent"
                    android:textStyle="bold"
                    android:textSize="18sp" />

                <view
                    android:id="@+id/recycler_view1"
                    class="android.support.v7.widget.RecyclerView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true" />

            </LinearLayout>


            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/tvTrending"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:text="PACKAGES"
                    android:textColor="@color/colorAccent"
                    android:textStyle="bold"
                    android:textSize="18sp" />

                <view
                    android:id="@+id/recycler_view2"
                    class="android.support.v7.widget.RecyclerView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:dividerHeight="10.0sp" />
            </LinearLayout>

        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:layout_gravity="center"/>

</FrameLayout>

这是我从MainActivity的viewpager调用的片段的布局。其中有这样的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.newitventure.musicnepal.MainActivity">

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/coordinatorLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/tabanim_appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


            <include
                android:id="@+id/tool_bar"
                layout="@layout/toolbar" />

            <android.support.design.widget.TabLayout
                android:id="@+id/tabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMaxWidth="0dp"
                android:background="@color/colorPrimaryDark"
                app:tabGravity="fill"
                app:tabTextAppearance="@style/MyCustomTextAppearance"
                app:tabMode="scrollable" />

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.view.ViewPager
            android:id="@+id/tabanim_viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="50dp"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />


    </android.support.design.widget.CoordinatorLayout>

    <LinearLayout
        android:id="@+id/gad_bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="bottom"
        android:orientation="horizontal"
        android:visibility="visible">

    </LinearLayout>
</RelativeLayout>

问题是在尝试滚动此布局时滚动不顺畅。尝试垂直和水平滚动时,它变得非常迟钝。这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

好,

我从代码中看到了三种可能性

1)您在根目录中使用RelativeLayout作为视图。虽然RelativeLayout非常棒,但确实有它的缺点。由于RelativeLayout的构建方式,它会自行测量两次并且其中包含所有子项。因此,对于当前显示的每个帧,Android需要重新计算每个视图两次。

2)你的视图确实有一个“相当”深的结构,我认为你可以摆脱你在TextView和recycleview对周围的3种线性布局中的每一种。

3)在显示您的recyclerviews时,您在bindView方法中做了很多事情。

现在所有这三个都很重要,并且在使它变得迟钝方面发挥作用。 我可能从2开始(我不认为这将完全解决它,但它应该提高代码的可读性和速度) 然后我会检查3(如果您粘贴适配器的代码,我可以查看它,如果那里有明确的东西)。如果仍然没有帮助尝试1(这可能很难,因为RelativeLayout非常适合构造代码)

希望它有所帮助!