要素がある場合は、子要素の位置と親要素(ListView 本体) の padding 位置を比較する。
OnScrollStateChanged 内でチェックするようにしても問題なく検出できる。
(一番上か一番下に到達してスクロールが止まると IDLE state になるらしい)
ただ、実際に試したところ onScroll 内で実行したほうがぴったりしたタイミングで検出できたので、
タイミングが重要な場合は onScroll 内でチェックしたほうが良い。
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(view.getChildCount() == 0) {
mAtTop = true;
mAtBottom = true;
} else {
if(view.getFirstVisiblePosition() == 0 && view.getChildAt(0).getTop() == view.getPaddingTop()){
mAtTop = true;
} else {
mAtTop = false;
}
if(view.getLastVisiblePosition() == totalItemCount - 1
&& view.getChildAt(view.getChildCount() - 1).getBottom() <= view.getBottom() - view.getPaddingBottom()){
mAtBottom = true;
} else {
mAtBottom = false;
}
}
}
});
0 件のコメント:
コメントを投稿