android - 如何随时(顺利)获取 NestedScrollView 中的滚动百分比?

标签 android scroll scrollview android-nestedscrollview

我想根据滚动更改工具栏的 alpha,如下所示:

enter image description here

起初,工具栏是透明的,滚动到底部会越来越明显,最后会完全不透明(可见)。

我的布局结构是:

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_collapseMode="parallax">

            ....

        </RelativeLayout>

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

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

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

         ....

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

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

嵌套 ScrollView 的内容将从服务器动态更改,所以我不知道它的高度。

我刚刚找到了 2 种检测 scrollY 的方法:

  1. addOnScrollChangedListener:

    scroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
     @Override
     public void onScrollChanged() {
        // use scroll.getScrollY()     
    }
    });
    
  2. setOnScrollChangeListener:

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

但是这些方式都不是一帆风顺的。例如,如果您检查 scrollY 的值(通过使用 log.d()),您将看到如下内容:

scrollY: 58
scrollY: 117
scrollY: 167
scrollY: 192
scrollY: 195
scrollY: 238
scrollY: 281
scrollY: 338 

数字之间有很大的差距。

我的问题是:如何每时每刻(平滑地)获得滚动百分比? 或者任何其他方式来根据滚动的当前位置更改工具栏的 alpha?

最佳答案

试试这个

scrollview.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                double scrollViewHeight = scrollview.getChildAt(0).getBottom() - scrollview.getHeight();
                double getScrollY = scrollview.getScrollY();
                double scrollPosition = (getScrollY / scrollViewHeight) * 100d;
                Log.i("scrollview", "scroll Percent Y: " + (int) scrollPosition);
            }
        });

它将显示从 0 到 100% 的百分比

关于android - 如何随时(顺利)获取 NestedScrollView 中的滚动百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40334052/

相关文章:

android - 解析和 Twilio

android - 如何仅在初始加载时将 MapView 居中?

jquery - 在没有滚动条的固定div内创建可滚动div

JavaScript滚动: How to execute function only once with least amount of CPU usage?

javascript - js滚动条按钮不起作用

android - 如何在 android 中使用 ScrollView 固定页脚?

Android powermanager/唤醒锁问题

android - 我们如何将 Canvas 上的绘图与 Android 中的预定义图像进行比较?

java - scrollPathToVisible 行为不正常

Android Scrollview 布局问题