NestedScrollview 和 SwipeRefreshLayout 下的多个视图(滚动问题)
Multiple views under NestedScrollview and SwipeRefreshLayout (issue with scroll)
所以我想到了下面的设计,我想要的是所有元素平滑地滚动在一起,并且支持滑动刷新。
我在 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"/>
此外,我还在片段的主要 class 中添加了以下行:
// 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 是否发生了一些变化,这意味着我必须完全改变我实现此设计的方式?实际上有更好的方法来做到这一点(标准明智的)吗?
对于仍在查看此 post 的任何人,我所做的是将所有内容都放在一个回收视图中(第一个单元格有 "imageview and some relative elements",第二个单元格有水平回收视图,第三个单元格在垂直的数据上)。
但这并没有解决平滑滚动问题。我发现在垂直方向上,我使用了一些太大的图像(可绘制对象),因此必须在运行时缩小它们,从而导致速度变慢。
我的建议是尽可能使用缓存图像加载库(Glide 很棒!),例如从 Internet 下载时。此外,当您想要从可绘制对象加载图像时(在 xml 中使用 'android:src'),请务必使用 android 提供的不同可绘制对象文件夹。这确实有助于提高性能!
您是否尝试添加下一行?
recyclerView.setNestedScrollingEnabled(false);
所以我想到了下面的设计,我想要的是所有元素平滑地滚动在一起,并且支持滑动刷新。
我在 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"/>
此外,我还在片段的主要 class 中添加了以下行:
// 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 是否发生了一些变化,这意味着我必须完全改变我实现此设计的方式?实际上有更好的方法来做到这一点(标准明智的)吗?
对于仍在查看此 post 的任何人,我所做的是将所有内容都放在一个回收视图中(第一个单元格有 "imageview and some relative elements",第二个单元格有水平回收视图,第三个单元格在垂直的数据上)。
但这并没有解决平滑滚动问题。我发现在垂直方向上,我使用了一些太大的图像(可绘制对象),因此必须在运行时缩小它们,从而导致速度变慢。
我的建议是尽可能使用缓存图像加载库(Glide 很棒!),例如从 Internet 下载时。此外,当您想要从可绘制对象加载图像时(在 xml 中使用 'android:src'),请务必使用 android 提供的不同可绘制对象文件夹。这确实有助于提高性能!
您是否尝试添加下一行?
recyclerView.setNestedScrollingEnabled(false);