我有一个scrollview,我只想要一个事件发生,如果它已经滚动到底部,但我找不到一种方法来检查滚动视图是否在底部。
我已经解决了相反的问题;只有在事件已经滚动到顶部时才允许事件发生:
ScrollView sv = (ScrollView) findViewById(R.id.Scroll);
if(sv.getScrollY() == 0) {
//do something
}
else {
//do nothing
}
答案 0 :(得分:9)
我找到了让它发挥作用的方法。我需要检查孩子的测量高度到ScrollView,在这种情况下是LinearLayout。我使用< =因为当不需要滚动时它也应该做某事。即当LinearLayout不如ScrollView那么高时。在这些情况下,getScrollY始终为0.
ScrollView scrollView = (ScrollView) findViewById(R.id.ScrollView);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.LinearLayout);
if(linearLayout.getMeasuredHeight() <= scrollView.getScrollY() +
scrollView.getHeight()) {
//do something
}
else {
//do nothing
}
答案 1 :(得分:5)
这是:
public class myScrollView extends ScrollView
{
public myScrollView(Context context)
{
super(context);
}
public myScrollView(Context context, AttributeSet attributeSet)
{
super(context,attributeSet);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt)
{
View view = (View)getChildAt(getChildCount()-1);
int d = view.getBottom();
d -= (getHeight()+getScrollY());
if(d==0)
{
//you are at the end of the list in scrollview
//do what you wanna do here
}
else
super.onScrollChanged(l,t,oldl,oldt);
}
}
您可以在xml布局中使用myScrollView或在代码中实例化它。 提示:使用上面的代码,如果用户频繁点击列表末尾10次,那么您的代码将运行10次。在某些情况下,例如当您想要从远程服务器加载数据以更新列表时,这种行为将是不受欢迎的(最有可能)。试着预测不良情况并避免它们。
提示2:有时接近列表末尾可能是让脚本运行的最佳时机。例如,用户正在阅读文章列表,并且已接近尾声。然后你在列表完成之前开始加载更多。为此,请执行此操作以实现您的目的:
if(d<=SOME_THRESHOLD) {}
答案 2 :(得分:1)
通过执行此操作,您可以获得宽度的最大滚动
int maxScroll = yourScrollView.getChildAt(0).getMeasuredWidth() - yourScrollView.getWidth();
将getWidth()更改为垂直滚动视图的getHeight()
答案 3 :(得分:0)
如果scrollView.getHeight()== scrollView.getScrollY + screensize,则滚动到底部。