Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我如何知道scrollview已经滚动到底部?_Android_Scrollview - Fatal编程技术网

Android 我如何知道scrollview已经滚动到底部?

Android 我如何知道scrollview已经滚动到底部?,android,scrollview,Android,Scrollview,我有一个scrollview,我只想在事件已经滚动到底部时发生,但我找不到检查scrollview是否在底部的方法 我已经解决了相反的问题;仅当事件已滚动到顶部时才允许事件发生: ScrollView sv = (ScrollView) findViewById(R.id.Scroll); if(sv.getScrollY() == 0) { //do something } else { //do nothing } 如果scr

我有一个scrollview,我只想在事件已经滚动到底部时发生,但我找不到检查scrollview是否在底部的方法

我已经解决了相反的问题;仅当事件已滚动到顶部时才允许事件发生:

ScrollView sv = (ScrollView) findViewById(R.id.Scroll);
    if(sv.getScrollY() == 0) {
        //do something
    }
    else {
        //do nothing
    }

如果scrollView.getHeight()==scrollView.getScrollY+screensize,那么它将被滚动到底部。

我找到了一种使它工作的方法。我需要检查滚动视图中孩子的测量高度,在本例中为线性布局。我使用通过这样做,您可以获得宽度的最大滚动

int maxScroll = yourScrollView.getChildAt(0).getMeasuredWidth() - yourScrollView.getWidth();
将垂直滚动视图的getWidth()更改为getHeight()

如下所示:

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) {}

if(谢谢你,但是当卷轴在底部时getScrollY=349 getBottom=430 getMeasuredHeight=430 getHeight=430无论我滚动了多远,最后三个都是一样的。唯一不同的是getScrollY。你提到的这个屏幕大小是多少?我没有对它进行交互吗?在这种情况下应该是81,我想不出任何变化就是这样。因为ScrollView只能有一个子项,您可以确定其中有一个子项:if(ScrollView.getScrollY()+ScrollView.getHeight()>=ScrollView.getChildAt(0.getMeasuredHeight()){/*已滚动到底部*/}这是放在一个方法中的吗?这段代码是如何实现的?@Itzhudini我尽可能地将其泛化,以便您可以以任何方式使用它。
if(d<=SOME_THRESHOLD) {}