ListView判斷是否滑動(dòng)到最底部

1、判斷l(xiāng)istView滑動(dòng)到最后一個(gè)Item的內(nèi)容的底部(即listview不能再向下滑):

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView absListView, int i) {
        switch (i) {
            case SCROLL_STATE_IDLE:
                flag = isListViewReachBottomEdge(absListView);
                break;
        }
    }
    @Override
    public void onScroll(AbsListView absListView, int i, int i1, int i2) {}
});

public boolean isListViewReachBottomEdge(final AbsListView listView) {
     boolean result = false;
     if (listView.getLastVisiblePosition() == (listView.getCount() - 1)) {
         final View bottomChildView = listView.getChildAt(listView.getLastVisiblePosition() - listView.getFirstVisiblePosition());
         result = (listView.getHeight() >= bottomChildView.getBottom());
     };
     return result;
 }

注:view的getBottom()表示的是該View底部到父控件的左上角的垂直距離。
當(dāng)ListView的最后一個(gè)child View的getBottom()小于等于ListView的getHeight()時(shí),就表示ListView滾動(dòng)到底部或已經(jīng)在底部了,不能再向下滑動(dòng)了。


public abstract void onScrollStateChanged (AbsListView view, int scrollState)

scrollState 分 SCROLL_STATE_TOUCH_SCROLL 和 SCROLL_STATE_IDLE,為正在滑動(dòng)和停止滑動(dòng)后。

public void onScrollStateChanged (RecyclerView recyclerView, int newState)

scrollState分SCROLL_STATE_IDLE,SCROLL_STATE_DRAGGING 和 SCROLL_STATE_SETTLING.

2、判斷l(xiāng)istView滑動(dòng)到最后一個(gè)Item的內(nèi)容的頭部:

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {

}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//    firstVisibleItem表示在現(xiàn)時(shí)屏幕第一個(gè)ListItem(部分顯示的ListItem也算)在整個(gè)ListView的位置(下標(biāo)從0開始) 
//  visibleItemCount表示在現(xiàn)時(shí)屏幕可以見到的ListItem(部分顯示的ListItem也算)總數(shù) 
//  totalItemCount表示ListView的ListItem總數(shù) 
    flag = ((firstVisibleItem + visibleItemCount) == totalItemCount);
}
});

3、判斷l(xiāng)istView滑動(dòng)到最后一個(gè)Item的內(nèi)容的頂部:

public boolean isListViewReachTopEdge(final ListView listView) {
    boolean result = false;
    if (listView.getFirstVisiblePosition() == 0) {
        final View topChildView = listView.getChildAt(0);
        result = topChildView.getTop() == 0;
    }
return result;
}

注:view的getTop()表示的是該View的頂部到父控件的左上角的垂直距離。
當(dāng)ListView的第一個(gè)child View的getTop()為零時(shí),就表示ListView已經(jīng)滾動(dòng)到頂部了或已經(jīng)在頂部不能在向上滑動(dòng)了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容