NestedScrollview和SwipeRefreshLayout下的多个视图(滚动问题)

时间:2017-02-26 21:42:36

标签: android android-layout android-nestedscrollview

所以我想到了以下设计,我想要的是所有元素都能平滑地滚动,并且还支持刷卡刷新。

enter image description here

我在Android 4.4.4中测试了以下xml,它运行得很好。卷轴快速而流畅,一切都很好!然而,当我在Android 7.1.1上部署它时,滚动变得非常滞后,大多数时候它会在你移开手指时停止,而不是放慢速度。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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:orientation="vertical"
>


<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipeContainer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/myScrollView"
        android:layout_height="match_parent"
        android:layout_width="match_parent">


        <RelativeLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


            <ImageView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:src="@drawable/mypicture"
                android:scaleType="centerCrop"
                android:id="@+id/top1pic" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_marginTop="230dp"
                android:background="@drawable/gradient_home_50">

                <TextView
                    android:text="Hello"
                    android:ellipsize="end"
                    android:maxLines="1"
                    android:paddingLeft="10dp"
                    android:textColor="@color/white"
                    android:textSize="27sp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/textView3" />

                <TextView
                    android:text="you are"
                    android:textColor="@color/white"
                    android:textSize="19sp"
                    android:paddingLeft="10dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/textView3"
                    android:layout_marginBottom="10dp"
                    android:id="@+id/textView5" />

                <ImageView
                    android:layout_marginLeft="10dp"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_below="@id/textView3"
                    android:layout_toEndOf="@id/textView5"
                    android:layout_marginBottom="10dp"
                    android:src="@drawable/rhome"
                    android:scaleType="centerCrop"
                    android:id="@+id/number1pic" />

            </RelativeLayout>


            <Space
                android:layout_width="1dp"
                android:layout_height="10dp"
                android:layout_below="@id/top1pic"
                android:id="@+id/uselessSpace"/>

            <TextView
                android:text="Sup"
                android:paddingLeft="10dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/uselessSpace"
                android:layout_marginTop="5dp"
                android:textStyle="bold"
                android:id="@+id/textView1" />

            <TextView
                android:text="mpla mpla"
                android:paddingLeft="10dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/textView1"
                android:id="@+id/textView10" />

            <android.support.v7.widget.RecyclerView
                android:id="@+id/horizontalRecycler"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/numberOfPeopleHere"
                android:minHeight="200dp"
                android:maxHeight="200dp"
                android:paddingTop="10dp" />

            <TextView
                android:text="mpla mpla"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_below="@id/horizontalRecycler"
                android:paddingBottom="10dp"
                android:id="@+id/textView4" />


            <android.support.v7.widget.RecyclerView
                android:id="@+id/homelist"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/textView4"
                android:layout_alignParentBottom="true"
                android:paddingBottom="48dp"
                android:maxHeight="200dp"
                android:clipToPadding="false"
                />

            <Space
                android:layout_width="1dp"
                android:layout_height="10dp"
                android:layout_above="@id/homelist"
                android:id="@+id/uselessSpace2"
                android:visibility="gone"
                />

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

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

<LinearLayout
    android:id="@+id/progressbarlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    android:gravity="center_horizontal"
    android:orientation="horizontal"
    android:weightSum="1">

    <ProgressBar
        style="@android:style/Widget.Holo.Light.ProgressBar.Small"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_gravity="center"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="All good?"
        android:textColor="@android:color/black"
        android:textSize="15sp"
        android:gravity="center"
        android:textStyle="bold"
        />
    <!--android:layout_weight="138.70"
    (was in textview above)-->
</LinearLayout>


<TextView
    android:id="@+id/toolbar_title"
    style="@style/Base.TextAppearance.Widget.AppCompat.Toolbar.Title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_centerHorizontal="true"
    android:paddingTop="10dp"
    android:textColor="@android:color/white"
    android:shadowColor="@android:color/black"
    android:shadowRadius="3"
    android:textSize="20sp"
    android:visibility="gone"/>

此外,我已将以下行添加到片段的主类中:

// for the vertical RecyclerView
recyclerView = (RecyclerView) v.findViewById(R.id.homelist);

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false) {
            @Override
            public boolean canScrollVertically() {
                return false;
            }
});

recyclerView.setNestedScrollingEnabled(false);

// for the horizontal RecyclerView    
RHRNRecycler = (RecyclerView) v.findViewById(R.id.horizontalRecycler);
RHRNRecycler.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false) {
            @Override
            public boolean canScrollVertically() {
                return false;
            }
}); 

在所有这些版本中,NestedScrollView都有所改变,这意味着我必须完全改变我实现这个设计的方式?实际上是否有更好的方法(标准)?

2 个答案:

答案 0 :(得分:0)

对于那些仍然在看这篇文章的人来说,我所做的就是将所有内容放在一个单一的Recyclerview中(第一个单元格有#34; imageview和一些相关元素&#34;第二个单元格有水平回收视图和来自第三个是垂直数据。)

然而,这并没有解决平滑滚动问题。我发现在垂直方向上,我使用的是一些太大的图像(drawable),所以它们必须在运行时缩小,从而导致速度减慢。

我的提示是尽可能使用缓存图像加载库(Glide很棒!),例如从互联网下载时。此外,当您想要从drawable加载图像时(使用&#39; android:src&#39;在xml中)请务必使用android提供的不同drawable文件夹。这确实有助于提高性能!

答案 1 :(得分:0)

您是否尝试添加下一行?

recyclerView.setNestedScrollingEnabled(false);