带有NestedScrollView的OnScrollChangeListener的FloatingActionButton会在滚动时跳转(但不会弹出)

时间:2018-10-27 18:26:20

标签: java android floating-action-button android-nestedscrollview

在我的应用程序中,我在OnScrollChangeListener的NestedScrollView中有一个FloatingActionButton,用于为图像创建视差效果(例如在Wikipedia应用程序中)并移动FAB,以使其看起来不奇怪。当用户滚动并放开时,效果很好,但是当用户滚动并按住手指时,FAB跳到屏幕底部。 Here's一个显示正在发生的事情的gif文件。

这是滚动侦​​听器的代码片段:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !media_type.equalsIgnoreCase("other")) {
                NestedScrollView main_layout = findViewById(R.id.main_view);
                main_layout.setOnScrollChangeListener((View.OnScrollChangeListener) (view, i, scrollY, i2, oldScrollY) -> {
                    if (scrollY > 10) {
                        shareButton.hide();
                    } else if (scrollY < 10) {
                        shareButton.show();
                    }
                    scroll = scrollY;
                    imageView.setTranslationY(scrollY * 0.5f);
                    shareButton.setTranslationY(scrollY * -0.5f);
                    findViewById(R.id.play_button).setTranslationY(scrollY * 0.5f);
                });
            }

这是我的布局(我离开了最重要的孩子):

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
    tools:context="....MainActivity"
    android:background="@color/colorPrimary"
    android:id="@+id/coordinator">

    .
    .
    .

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/main_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentStart="true"
                android:id="@+id/frame">

                <ImageView
                    android:id="@+id/image_main"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:transitionName="img" />

                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@drawable/video_play_icon"
                    android:layout_gravity="center"
                    android:id="@+id/play_icon"
                    android:visibility="gone"/>

            </FrameLayout>

            .
            .
            .

        </RelativeLayout>

    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/share_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:src="@drawable/outline_share_white_24"
        app:fabSize="normal"
        app:layout_anchor="@+id/image_main"
        app:layout_anchorGravity="bottom|right|end" />

    .
    .
    .

</android.support.design.widget.CoordinatorLayout>

为什么代码只对快速弹奏有效?

编辑:如果没有shareButton.setTranslationY(scrollY * -0.5f);行,也会发生此错误

编辑2:当我将layout_anchor设置为main_view(NestedScrollLayout)时,问题不存在,但显然FAB位置不好,所以我不会那样做。 / p>

0 个答案:

没有答案