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

问题描述 投票:2回答:3

是否可以检查ScrollView是否在顶部滚动?

我想检查一下,这样我就可以启用SwipeRefreshLayout,否则将其禁用。

使用ListView可以像这样完成,但ScrollViews没有setOnScrollListener

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);
}
});
java android uiscrollview
3个回答
7
投票

这个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);
        }
    });

1
投票

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


0
投票

在Kotlin:

scrollView.viewTreeObserver.addOnScrollChangedListener {
    if (!scrollView.canScrollVertically(1)) {
        // Bottom of scroll view.
    }
    if (!scrollView.canScrollVertically(-1)) {
        // Top of scroll view.
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.