44

一番下にネストされたscrollview Androidのスクロールの位置を検出し、関数を呼び出すだけです。私のコードは:

scroll.getViewTreeObserver()
      .addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
           @Override
           public void onScrollChanged() {
               int totalHeight = scroll.getChildAt(0).getHeight();
               int scrollY = scroll.getScrollY();
               Log.v("position", "totalHeight=" + totalHeight + "scrollY=" + scrollY);
               if (scrollY==totalHeight) {
                   getPlaylistFromServer("more");
               }
           }
      });

ただし、全高は MAX ScrollY と同じではありません。それを修正する方法?

4

8 に答える 8

112

setOnScrollChangeListener取得するNestedScrollViewパラメータに設定

  • NestedScrollView v (スクロール付きの親)
  • int scrollY
  • int oldScrollY

オフセットが下にあるかどうかを検出するには、コンテンツの高さの値を取得しv.getChildAt(0).getMeasuredHeight()、現在のスクロールと親の高さを比較する必要があります。値が同じであれば、最後まで到達したことを意味します。

親ビューで高さを取得できますv.getMeasuredHeight()

NestedScrollView scroller = (NestedScrollView) findViewById(R.id.myScroll);

if (scroller != null) {

    scroller.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
        @Override
        public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            if (scrollY > oldScrollY) {
                Log.i(TAG, "Scroll DOWN");
            }
            if (scrollY < oldScrollY) {
                Log.i(TAG, "Scroll UP");
            }

            if (scrollY == 0) {
                Log.i(TAG, "TOP SCROLL");
            }

           if (scrollY == ( v.getMeasuredHeight() - v.getChildAt(0).getMeasuredHeight() )) {
               Log.i(TAG, "BOTTOM SCROLL");
           }
       }
    });
}
于 2016-06-04T12:10:00.187 に答える
42

遅いことはわかっていますが、この方法を試してください。

scroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
    @Override
    public void onScrollChanged() {
            View view = (View) scroll.getChildAt(scroll.getChildCount() - 1);

            int diff = (view.getBottom() - (scroll.getHeight() + scroll
                    .getScrollY()));

            if (diff == 0) {
                getPlaylistFromServer("more");
            }          
    }
});

幸せなコーディング..

于 2016-06-03T04:54:27.743 に答える
0

Webserve は正しいと答えましたが、条件は次のようになります。

 if (scrollY == (v?.getChildAt(0)?.measuredHeight ?: 0) - (v?.measuredHeight ?: 0)) {
    //at bottom
    }
于 2020-04-09T10:12:15.223 に答える