滚动视图内的recyclerview在滚动时滞后

时间:2017-05-05 07:06:31

标签: android android-layout android-recyclerview scrollview

我所拥有的是2个线性布局(左和右),每个布局由垂直滚动的recyclerView组成,它们相对于彼此的位置滚动。左边的一个是相对于它的头部是静态的...而右边的一个需要是相对于其标题水平滚动,recyclelerview垂直滚动..(标题不需要垂直滚动)。我已经尝试过nestedscrollview但是标题滚动出视图。 布局平滑滚动,而在水平但垂直方向上滞后

这是代码: SavingSecondFrag.java 这是片段。

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_saving_second, container, false);
    ButterKnife.bind(this, view);

    recyclerViewsInitializations();
    prepareSavingsData();

    recycler_left.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            left_scroll = true;
            right_scroll = false;
            return false;
        }
    });

    recycler_right.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            left_scroll = false;
            right_scroll = true;
            return false;
        }
    });


    recycler_left.addOnScrollListener(new OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, final int dx, final int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (left_scroll) {
                recycler_right.scrollBy(dx, dy);
                View current = getActivity().getCurrentFocus();
            }
        }
    });

    recycler_right.addOnScrollListener(new OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, final int dx, final int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (right_scroll) {
                recycler_left.scrollBy(dx, dy);
                Log.e("TAG", dx + " and " + dy);
            }

        }
    });


    return view;
}

这是布局 对不起它有点长.. fragment_saving_code.xml

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:layout_width="40dp"
                android:layout_height="80dp"
                android:layout_gravity="center_vertical"
                android:background="@color/colorPrimary"
                android:gravity="bottom"
                android:padding="4dp"
                android:text=""
                android:textAlignment="center"
                android:textColor="@android:color/white"
                android:textSize="16sp" />

            <TextView
                android:layout_width="130dp"
                android:layout_height="80dp"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="1dp"
                android:background="@color/colorPrimary"
                android:gravity="bottom"
                android:padding="4dp"
                android:text="Member Name"
                android:textColor="@android:color/white"
                android:textSize="16sp" />
        </LinearLayout>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_left"
            android:layout_width="170dp"
            android:layout_height="match_parent" />

    </LinearLayout>

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="none">

        <LinearLayout
            android:layout_width="1200dp"
            android:layout_height="match_parent"
            android:orientation="vertical">


            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <LinearLayout
                    android:layout_width="200dp"
                    android:layout_height="80dp"
                    android:layout_marginLeft="1dp"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="200dp"
                        android:layout_height="40dp"
                        android:layout_gravity="center"
                        android:background="@color/colorPrimary"
                        android:gravity="center"
                        android:text="Total Saving"
                        android:textAlignment="center"
                        android:textColor="@android:color/white"
                        android:textSize="16sp" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="40dp"
                        android:orientation="horizontal"
                        android:weightSum="2">

                        <TextView
                            android:layout_width="100dp"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginRight="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Group"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                        <TextView
                            android:layout_width="100dp"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginLeft="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Personal"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                    </LinearLayout>


                </LinearLayout>

                <LinearLayout
                    android:layout_width="200dp"
                    android:layout_height="80dp"
                    android:layout_marginLeft="1dp"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="200dp"
                        android:layout_height="40dp"
                        android:layout_gravity="center"
                        android:background="@color/colorPrimary"
                        android:gravity="center"
                        android:text="Planned Saving"
                        android:textAlignment="center"
                        android:textColor="@android:color/white"
                        android:textSize="16sp" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="40dp"
                        android:orientation="horizontal"
                        android:weightSum="2">

                        <TextView
                            android:layout_width="100dp"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginRight="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Group"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                        <TextView
                            android:layout_width="100dp"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginLeft="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Personal"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                    </LinearLayout>


                </LinearLayout>

                <TextView
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="1dp"
                    android:background="@color/colorPrimary"
                    android:gravity="bottom"
                    android:padding="4dp"
                    android:text="Total Refunded"
                    android:textAlignment="center"
                    android:textColor="@android:color/white"
                    android:textSize="16sp" />

                <TextView
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="1dp"
                    android:background="@color/colorPrimary"
                    android:gravity="bottom"
                    android:padding="4dp"
                    android:text="Total Balance"
                    android:textAlignment="center"
                    android:textColor="@android:color/white"
                    android:textSize="16sp" />

                <TextView
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="1dp"
                    android:background="@color/colorPrimary"
                    android:gravity="bottom"
                    android:padding="4dp"
                    android:text="Total Interest"
                    android:textAlignment="center"
                    android:textColor="@android:color/white"
                    android:textSize="16sp" />

                <LinearLayout
                    android:layout_width="400dp"
                    android:layout_height="80dp"
                    android:layout_marginLeft="1dp"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="400dp"
                        android:layout_height="40dp"
                        android:layout_gravity="center"
                        android:background="@color/colorPrimary"
                        android:gravity="center"
                        android:text="Current Saving"
                        android:textAlignment="center"
                        android:textColor="@android:color/white"
                        android:textSize="16sp" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="40dp"
                        android:orientation="horizontal"
                        android:weightSum="4">

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginRight="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Group"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginRight="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Personal"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginRight="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Optional"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="40dp"
                            android:layout_gravity="center"
                            android:layout_marginLeft="0.5dp"
                            android:layout_weight="1"
                            android:background="@color/colorPrimary"
                            android:gravity="center"
                            android:text="Child"
                            android:textAlignment="center"
                            android:textColor="@android:color/white"
                            android:textSize="16sp" />

                    </LinearLayout>


                </LinearLayout>

                <TextView
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="1dp"
                    android:background="@color/colorPrimary"
                    android:gravity="bottom"
                    android:padding="4dp"
                    android:text="Refund"
                    android:textAlignment="center"
                    android:textColor="@android:color/white"
                    android:textSize="16sp" />

            </LinearLayout>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recycler_right"
                android:layout_width="1200dp"
                android:layout_height="match_parent" />
        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout>

this is the layout screenshot

1 个答案:

答案 0 :(得分:0)

主要问题是您使用的是复杂的UI层次结构,它具有多个嵌套布局
它会降低应用程序的性能。

解决方案是您应该进行优化以使层次结构级别尽可能地最低。 F 或示例,您可以使用RelativeLayout或ConstraintsLayout而不是许多嵌套的LinearLayouts

此外,在上面的代码中,您使用包含许多子视图的Horizo​​ntalView。您可以尝试将其替换为具有更好性能的其他UI元素 例如,您应该考虑使用TabBar和ViewPager。