5

我正在编写一个具有 NestedScrollView 的应用程序。我想处理滚动是否发生了变化。我在互联网上搜索,发现我必须创建自定义 ScrollView。这是我的代码:

public interface OnScrollChangedListener {

    void onScrollChanged(MyScrollView nestedScrollView, int l, int t, int oldl, int oldt);

}

首先,我创建了一个界面来处理滚动更改,然后我创建了自定义 NestedScrollView

public class MyScrollView extends NestedScrollView{

    private OnScrollChangedListener onScrollChangedListener;

    public void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener) {
        this.onScrollChangedListener = onScrollChangedListener;
    }

    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if(onScrollChangedListener != null){
            onScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt);
        }
    }
}

然后我在我的布局中使用了这个自定义的 NestedScrollView

<com.example.whatshouldido.app.activities.MyScrollView
                android:layout_width="match_parent"
                android:clickable="false"
                android:scrollbars="none"
                android:id="@+id/nested_scroll"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"
                android:layout_height="match_parent">

            <TableLayout android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:gravity="center"
                         android:elevation="5dp"
                         android:padding="2dp"
                         android:background="@android:color/background_light">

                <TableRow>

                    <FrameLayout android:layout_width="0dp"
                                 android:elevation="5dp"
                                 android:id="@+id/fl_theaters"
                                 android:clickable="true"
                                 android:focusable="false"
                                 android:focusableInTouchMode="false"
                                 android:background="@drawable/ripple_efect"
                                 android:layout_marginBottom="2dp"
                                 android:layout_marginEnd="2dp"
                                 android:layout_weight="1"
                                 android:layout_height="150dp">

                        <TextView android:layout_width="match_parent"
                                  android:textSize="20sp"
                                  android:text="@string/theaters"
                                  android:textColor="@color/color_primary"
                                  android:textStyle="bold"
                                  android:layout_marginLeft="5dp"
                                  android:layout_marginTop="5dp"
                                  android:layout_height="wrap_content"/>

                        <ImageView android:layout_width="match_parent"
                                   android:id="@+id/iv_theater"
                                   android:src="@mipmap/ic_theaters_white_36dp"
                                   android:scaleType="centerCrop"
                                   android:padding="50dp"
                                   android:layout_height="match_parent"/>

                    </FrameLayout>

                    <FrameLayout android:orientation="horizontal"
                                 android:layout_width="0dp"
                                 android:clickable="true"
                                 android:id="@+id/fl_movies"
                                 android:background="@drawable/ripple_efect"
                                 android:layout_marginBottom="2dp"
                                 android:elevation="5dp"
                                 android:layout_weight="1"
                                 android:layout_height="150dp">

                        <TextView android:layout_width="match_parent"
                                  android:textSize="20sp"
                                  android:text="@string/cinemas"
                                  android:textColor="@color/movie_color"
                                  android:textStyle="bold"
                                  android:layout_marginLeft="5dp"
                                  android:layout_marginTop="5dp"
                                  android:layout_height="wrap_content"/>

                        <ImageView android:layout_width="match_parent"
                                   android:padding="50dp"
                                   android:id="@+id/iv_movie"
                                   android:src="@mipmap/ic_movie_white_36dp"
                                   android:scaleType="centerCrop"
                                   android:layout_height="match_parent"/>

                    </FrameLayout>

                </TableRow>

                <TableRow>

                    <FrameLayout android:orientation="horizontal"
                                 android:layout_width="0dp"
                                 android:clickable="true"
                                 android:id="@+id/fl_restaurants"
                                 android:background="@drawable/ripple_efect"
                                 android:elevation="5dp"
                                 android:layout_marginBottom="2dp"
                                 android:layout_marginEnd="2dp"
                                 android:layout_weight="1"
                                 android:layout_height="150dp">

                        <TextView android:layout_width="match_parent"
                                  android:textSize="20sp"
                                  android:text="@string/restaurants"
                                  android:textColor="@color/restaurant_color"
                                  android:textStyle="bold"
                                  android:layout_marginLeft="5dp"
                                  android:layout_marginTop="5dp"
                                  android:layout_height="wrap_content"/>

                        <ImageView android:layout_width="match_parent"
                                   android:padding="50dp"
                                   android:id="@+id/iv_restaurant"
                                   android:src="@mipmap/ic_restaurant_white_36dp"
                                   android:scaleType="centerCrop"
                                   android:layout_height="match_parent"/>

                    </FrameLayout>

                    <FrameLayout android:orientation="horizontal"
                                 android:layout_width="0dp"
                                 android:id="@+id/fl_cafes"
                                 android:layout_marginBottom="2dp"
                                 android:clickable="true"
                                 android:background="@drawable/ripple_efect"
                                 android:elevation="5dp"
                                 android:layout_weight="1"
                                 android:layout_height="150dp">

                        <TextView android:layout_width="match_parent"
                                  android:textSize="20sp"
                                  android:text="@string/cafes"
                                  android:textColor="@color/cafe_color"
                                  android:textStyle="bold"
                                  android:layout_marginLeft="5dp"
                                  android:layout_marginTop="5dp"
                                  android:layout_height="wrap_content"/>

                        <ImageView android:layout_width="match_parent"
                                   android:id="@+id/iv_cafe"
                                   android:src="@mipmap/ic_free_breakfast_white_36dp"
                                   android:scaleType="centerCrop"
                                   android:padding="50dp"
                                   android:layout_height="match_parent"/>

                    </FrameLayout>

                </TableRow>

                <TableRow>

                    <FrameLayout android:orientation="horizontal"
                                 android:layout_width="0dp"
                                 android:elevation="5dp"
                                 android:id="@+id/fl_gyms"
                                 android:layout_marginEnd="2dp"
                                 android:clickable="true"
                                 android:background="@drawable/ripple_efect"
                                 android:layout_weight="1"
                                 android:layout_height="150dp">

                        <TextView android:layout_width="match_parent"
                                  android:textSize="20sp"
                                  android:text="@string/fitness_centers"
                                  android:textColor="@color/fitness_color"
                                  android:textStyle="bold"
                                  android:layout_marginLeft="5dp"
                                  android:layout_marginTop="5dp"
                                  android:layout_height="wrap_content"/>

                        <ImageView android:layout_width="match_parent"
                                   android:padding="50dp"
                                   android:id="@+id/iv_fitness"
                                   android:src="@mipmap/ic_fitness_center_white_36dp"
                                   android:scaleType="centerCrop"
                                   android:layout_height="match_parent"/>

                    </FrameLayout>

                    <FrameLayout android:orientation="horizontal"
                                 android:layout_width="0dp"
                                 android:clickable="true"
                                 android:id="@+id/fl_clubs"
                                 android:background="@drawable/ripple_efect"
                                 android:elevation="5dp"
                                 android:layout_weight="1"
                                 android:layout_height="150dp">

                        <TextView android:layout_width="match_parent"
                                  android:textSize="20sp"
                                  android:text="@string/clubs"
                                  android:textColor="@color/bar_color"
                                  android:textStyle="bold"
                                  android:layout_marginLeft="5dp"
                                  android:layout_marginTop="5dp"
                                  android:layout_height="wrap_content"/>

                        <ImageView android:layout_width="match_parent"
                                   android:padding="50dp"
                                   android:id="@+id/iv_bar"
                                   android:src="@mipmap/ic_local_bar_white_36dp"
                                   android:scaleType="centerCrop"
                                   android:layout_height="match_parent"/>

                    </FrameLayout>

                </TableRow>

            </TableLayout>

        </com.example.whatshouldido.app.activities.MyScrollView>

我已经在 MainActivity 的 onCreate() 中声明了它

MyScrollView myScrollView = (MyScrollView) findViewById(R.id.nested_scroll);

        myScrollView.setOnScrollChangedListener(new OnScrollChangedListener() {
            @Override
            public void onScrollChanged(MyScrollView nestedScrollView, int l, int t, int oldl, int oldt) {
                onClick(fabLike);
            }
        });

但我仍然无法处理滚动更改。我只需要知道卷轴是否发生了变化。我也试过 onTouchListener 但 NestedScrollView 冻结。我也试过这个

myScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                onClick(fabLike);
            }
        });

但这无济于事。任何帮助,将不胜感激。提前致谢。

4

0 回答 0