要素がある場合は、子要素の位置と親要素(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 件のコメント:
コメントを投稿