package com.lechange.demo.view; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.View; import com.lechange.pulltorefreshlistview.Mode; import com.lechange.pulltorefreshlistview.Orientation; import com.lechange.pulltorefreshlistview.PullToRefreshBase; public class LcPullToRefreshRecyclerView extends PullToRefreshBase { public LcPullToRefreshRecyclerView(Context context) { super(context); } public LcPullToRefreshRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); } public LcPullToRefreshRecyclerView(Context context, Mode mode) { super(context, mode); } @Override public Orientation getPullToRefreshScrollDirection() { return Orientation.VERTICAL; } @Override protected RecyclerView createRefreshableView(Context context, AttributeSet attrs) { RecyclerView recyclerView = new RecyclerView(context); return recyclerView; } @Override protected boolean isReadyForPullStart() { return isFirstItemVisible(); } public boolean isFirstItemVisible() { final RecyclerView.Adapter adapter = getRefreshableView().getAdapter(); //如果未设置Adapter或者Adpter没有数据可以下拉刷新 if(null == adapter || adapter.getItemCount() == 0){ return true; }else{ if(getFristVisiblePosition() == 0){ return mRefreshableView.getChildAt(0).getTop() >= mRefreshableView.getTop(); } } return false; } public int getFristVisiblePosition() { View firstVisibleChild = mRefreshableView.getChildAt(0); return firstVisibleChild != null ? mRefreshableView.getChildPosition(firstVisibleChild) : -1; } @Override protected boolean isReadyForPullEnd() { return isLastItemVisible(); } public boolean isLastItemVisible() { final RecyclerView.Adapter adapter = getRefreshableView().getAdapter(); //如果未设置Adapter或者Adpter没有数据可以下拉刷新 if(null == adapter || adapter.getItemCount() == 0){ return true; }else{ if(getLastVisiblePosition() == adapter.getItemCount() - 1){ return mRefreshableView.getChildAt(mRefreshableView.getChildCount() - 1).getBottom() <= mRefreshableView.getBottom(); } } return false; } public int getLastVisiblePosition() { View lastVisibleChild = mRefreshableView.getChildAt(mRefreshableView.getChildCount() - 1); return lastVisibleChild != null ? mRefreshableView.getChildPosition(lastVisibleChild) : -1; } }