检查 ScrollView 是不是已到达布局的顶部

Posted

技术标签:

【中文标题】检查 ScrollView 是不是已到达布局的顶部【英文标题】:Check if a ScrollView has reached the top of the layout检查 ScrollView 是否已到达布局的顶部 【发布时间】:2016-10-28 00:27:45 【问题描述】:

是否可以检查 ScrollView 是否一直滚动到顶部?

我想检查一下,以便启用 SwipeRefreshLayout,否则保持禁用状态。

使用 ListView 可以这样做,但没有 setOnScrollListener 用于 ScrollViews

listView.setOnScrollListener(new OnScrollListener() 

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) 
    

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) 
        boolean enable = false;
        if(listView != null && listView.getChildCount() > 0)
            // check if the first item of the list is visible
        boolean firstItemVisible = listView.getFirstVisiblePosition() == 0;
        // check if the top of the first item is visible
        boolean topOfFirstItemVisible = listView.getChildAt(0).getTop() == 0;
        // enabling or disabling the refresh layout
        enable = firstItemVisible && topOfFirstItemVisible;
    
    swipeRefreshLayout.setEnabled(enable);

);

【问题讨论】:

那不是:***.com/questions/7318373/… 为你工作吗? 您的问题询问是否可以检查ListView,然后您就如何为列表视图提供答案。您还突然提到了 ScrollView。如果您的问题是关于 ScrollViews,您不能使用 ScrollView.setOnScrollChangeListener @MarcusHooper 我的错,我的意思是 ScrollView ... 【参考方案1】:

此link 可能对您有所帮助。它显示了如何为ScrollView 设置滚动监听器。然后,参考@antonio 的回答。

你的情况是:

    mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() 
        @Override
        public void onScrollChanged() 
            int scrollY = mScrollView.getScrollY(); //for verticalScrollView
            if (scrollY == 0) 
                swipeRefresh.setEnabled(true);
            else 
                swipeRefresh.setEnabled(false);
        
    );

【讨论】:

是的,就是这样。谢谢!【参考方案2】:

你可以使用getScrollY()方法(from the View class)

【讨论】:

【参考方案3】:

在 Kotlin 中:

scrollView.viewTreeObserver.addOnScrollChangedListener 
    if (!scrollView.canScrollVertically(1)) 
        // Bottom of scroll view.
    
    if (!scrollView.canScrollVertically(-1)) 
        // Top of scroll view.
    

【讨论】:

以上是关于检查 ScrollView 是不是已到达布局的顶部的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView起始位置不是最顶部的解决办法

如何滚动到长 ScrollView 布局的顶部?

如何在scrollview的顶部固定一个控件

折叠标题视图 - ScrollView 在到达底部时停止滚动

android 自定义scrollview 仿QQ空间效果 下拉伸缩顶部图片,上拉回弹 上拉滚动顶部title 颜色渐变

Android ScrollView在滚动中调用scrollTo(0,0)回到顶部无效