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