检查 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 在到达底部时停止滚动
android 自定义scrollview 仿QQ空间效果 下拉伸缩顶部图片,上拉回弹 上拉滚动顶部title 颜色渐变