package zone.com.zrefreshlayout.utils; import android.support.v7.widget.RecyclerView; import android.view.View; /** * [2017] by Zone */ public class RecyclerViewUtils { /** * 判断最后一个条目是否完全可见 * * @param recyclerView * @return */ public static boolean isLastItemVisible(RecyclerView recyclerView) { final RecyclerView.Adapter<?> adapter = recyclerView.getAdapter(); // 如果未设置Adapter或者Adapter没有数据可以上拉刷新 if (null == adapter || adapter.getItemCount() == 0) { return true; } // 最后一个条目View完全展示,可以刷新 int lastVisiblePosition = getLastVisiblePosition(recyclerView); if (lastVisiblePosition >= recyclerView.getAdapter().getItemCount() - 1) { return recyclerView.getChildAt(recyclerView.getChildCount() - 1).getBottom() <= recyclerView.getBottom(); } return false; } /** * 获取最后一个可见子View的位置下标 * * @param recyclerView * @return */ public static int getLastVisiblePosition(RecyclerView recyclerView) { View lastVisibleChild = recyclerView.getChildAt(recyclerView.getChildCount() - 1); return lastVisibleChild != null ? recyclerView.getChildAdapterPosition(lastVisibleChild) : -1; } /** * 判断第一个条目是否完全可见 * * @param recyclerView * @return */ public static boolean isFirstItemVisible(RecyclerView recyclerView) { final RecyclerView.Adapter<?> adapter = recyclerView.getAdapter(); // 如果未设置Adapter或者Adapter没有数据可以下拉刷新 if (null == adapter || adapter.getItemCount() == 0) { return true; } // 第一个条目完全展示,可以刷新 if (getFirstVisiblePosition(recyclerView) == 0) { return recyclerView.getChildAt(0).getTop() >= recyclerView.getTop(); } return false; } /** * 获取第一个可见子View的位置下标 * * @param recyclerView * @return */ public static int getFirstVisiblePosition(RecyclerView recyclerView) { View firstVisibleChild = recyclerView.getChildAt(0); return firstVisibleChild != null ? recyclerView.getChildAdapterPosition(firstVisibleChild) : -1; } }