到达NestedScrollView末尾时显示另一个背景

时间:2017-04-12 11:09:58

标签: android android-scrollview android-nestedscrollview

我已经在很多网站上检查了这个概念,并想在我的应用中制作它。这个想法很简单,有一个静态背景,例如颜色作为应用程序中的背景,当滚动在末尾时,它会在底部显示一些树。

这就像将第二个背景放在Scrollview的底部。我试图只放置一个背景,但它显示在应用程序的底部,而不是Scrollview中。

有没有办法做到这一点?因为我已经搜索过,并没有找到任何可靠的来源。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以使用此XML布局实现所需内容(或以编程方式构建相同的结构)。

你只需要将一个带有你的drawable的ImageView作为" src"位于NestedScrollView内部ViewGroup的底部(因为ScrollViews只能有一个子节点)。你会得到一个ScrollView,里面有一个ViewGroup,你的内容后跟你的图像。

当用户滚动到内容下方的底部时,图像将从底部显示。在下面的代码中,我向您展示了XML,您可以在其中设置应用程序的背景,滚动视图的底部以及放置内容的位置。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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"
    android:background="@drawable/app_background">
    <!-- YOU CAN SET YOUR APP BACKGROUND COLOR OR DRAWABLE UP HERE -->

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

                <!-- YOUR CONTENT GOES HERE -->
                <TextView android:text="Your content here instead of this TextView"
                          android:layout_width="match_parent" 
                          android:layout_height="1500dp" />


                <!-- YOUR FOOTER IMAGE HERE -->
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:src="@drawable/trees" />
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</LinearLayout>

如果您希望底部的图像显示在ScrollView内容后面而不是下面,则需要删除上面的XML中的ImageView ,而不是将背景可绘制设置为NestedScrollView内的LinearLayout,并使用以下XML资源drawable作为背景:

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/trees"
    android:gravity="bottom|center_horizontal" />

此XML将创建一个新的drawable,当设置为背景时,该drawable与视图的底部对齐。只需将该代码保存在drawable文件夹中名为trees_background.xml的xml文件中,并将LinearLayout更改为

android:background="@drawable/trees_background.xml"

答案 1 :(得分:0)

如果我理解正确,那么实现所需行为的最简单方法是在回收商的适配器中添加额外的ViewType,并将此项添加到商品列表的末尾。它将作为Recycler View的页脚,因此当用户滚动到底部时,他们将看到您的树或任何东西。

答案 2 :(得分:0)

您可以通过以下方式检测您是否已经到达NestedScrollView的底部,然后可以应用您自己的逻辑来相应地更改背景。

  NestedScrollView nestedScrollView = (NestedScrollView) findViewById(R.id.nestedScrollView);

        nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
            @Override
            public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

                if (scrollY < oldScrollY) {
                    // Scroll UP
                } else if (scrollY > oldScrollY) {
                    //Scroll down

                } else if (scrollY == 0) {
                    // TOP SCROLL
                } else if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) {
                    //You have reached  the bottom of nested scrollview
                    //Add you logic here to change background
                }
            }
        });

希望我能帮到你。