Если на кнопку наползает другой слой, можно ли сделать её некликабельной?

У меня есть кнопка close и ScrollView.

Когда кнопка находится в такой положении она должна быть кликабельной и видимой: как тут

Когда на кнопку наползает RelativeLayout она должна становиться не кликабельной и не видимой: как тут

Код:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/close"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="60dp"
        android:layout_marginEnd="21dp" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:scrollbars="none">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="110dp">

            <View
                android:layout_width="match_parent"
                android:layout_height="1420dp"
                android:background="#99AAB5"/>

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

Ответы (2 шт):

Автор решения: Vlad Orlinskas

Кликабельность и видимость кнопки можно задать в коде

R.id.close.isEnabled = false 
R.id.close.visibility = View.INVISIBLE

но лучше просто

R.id.close.visibility = View.GONE

Момент сближения или касания ScrollView к вашей кнопке можно получить в слушателе прокрутки.

scrollView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {
    @Override
    public void onScrollChanged() {
        // тут вам нужно сопоставить положение вашей прокрутки к положению кнопки
        
        int scrollY = scrollView.getScrollY(); 
        int btnBottom = R.id.close.bottom  
        
        if (scrollY > btnBottom) {
            R.id.close.visibility = View.Gone
        } else {
            R.id.close.visibility = View.Visible
     
    }
});
→ Ссылка
Автор решения: Dewerro

В таком случае лучше использовать NestedScrollView в паре с CollapsingToolbarLayout

<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="126dp"
android:fitsSystemWindows="true">

    <com.google.android.material.appbar.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/cyan"
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:toolbarId="@+id/toolbar">

        <carbon.widget.RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_collapseMode="parallax">

            <!-- content of AppBarLayout-->

        </carbon.widget.RelativeLayout>

    </com.google.android.material.appbar.CollapsingToolbarLayout>

</com.google.android.material.appbar.AppBarLayout>

<androidx.core.widget.NestedScrollView
    android:id="@+id/nested_scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never"
    android:scrollbars="none"
    app:layout_behavior=
    "com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">

    <!-- content of NestedScrollView -->

</androidx.core.widget.NestedScrollView>
→ Ссылка