15

スクロールビューがあり、既に一番下までスクロールされている場合にのみイベントを発生させたいのですが、スクロールビューが一番下にあるかどうかを確認する方法が見つかりません。

私はそれを逆に解決しました。すでに一番上までスクロールされている場合にのみ、イベントの発生を許可します。

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

4 に答える 4

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
    }
于 2010-05-19T14:09:49.660 に答える
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) {}
于 2013-07-25T14:02:37.490 に答える
1

これを行うことで、幅の最大スクロールを取得できます

int maxScroll = yourScrollView.getChildAt(0).getMeasuredWidth() - yourScrollView.getWidth();

垂直スクロール ビューの getWidth() を getHeight() に変更

于 2013-03-26T20:19:32.663 に答える
0

scrollView.getHeight() == scrollView.getScrollY + screensize の場合、下にスクロールされます。

于 2010-05-19T12:15:28.973 に答える