1 ,xml布局:com.xinshangyun.app.ui.view.PullToRefreshLayout    android:id="@+id/fudan_refresh_view"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_below="@+id/title_bar"    android:divider="@android:color/transparent"    android:dividerHeight="@dimen/dp_0"    android:listSelector="@android:color/transparent">            

2,自定义的RecycleView

public class PullableRecyclerView extends RecyclerView  implements Pullable {    private int lastPosition;    private boolean mCanPullDown = true;    private boolean mCanPullUp = true;    private boolean pd = true;    public PullableRecyclerView(Context context) {        super(context);    }    public PullableRecyclerView(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);    }    public PullableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    //判断是否可以下拉刷新    public void setNo(boolean pd){        this.pd = pd;    }    //是否可以下拉    public void setCanPullDown(boolean canPullDown) {        this.mCanPullDown = canPullDown;    }    public void setCanPullUp(boolean canPullUp) {        this.mCanPullUp = canPullUp;    }    /**     * 可以下拉     *     * @return     */    @Override    public boolean canPullDown() {        if(mCanPullDown) {            if (getChildCount() == 0) {                return true;            } else if (getChildAt(0).getTop() >= 0) {                if (getLayoutManager() instanceof LinearLayoutManager) {                    int firstVisibleItem = ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition();                    if (firstVisibleItem == 0) {                        return true;                    }                } else if (getLayoutManager() instanceof GridLayoutManager) {                    int firstVisibleItem = ((GridLayoutManager) getLayoutManager()).findFirstVisibleItemPosition();                    if (firstVisibleItem == 0) {                        return true;                    }                }else if(getLayoutManager() instanceof StaggeredGridLayoutManager){                    //因为StaggeredGridLayoutManager的特殊性可能导致最后显示的item存在多个,所以这里取到的是一个数组                    //得到这个数组后再取到数组中position值最大的那个就是最后显示的position值了//                    int[] lastPositionsDown = new int[((StaggeredGridLayoutManager) getLayoutManager()).getSpanCount()];                    int lastPositionsDown[] = ((StaggeredGridLayoutManager)getLayoutManager()).findFirstVisibleItemPositions(null);                    if(findMin(lastPositionsDown)==0){                        return true;                    }                }            }        }        return false;    }    /**     * 可以上拉     *     * @return     */    @Override    public boolean canPullUp() {        if(mCanPullUp) {            if (getChildCount() == 0) {                return true;            } else {                RecyclerView.LayoutManager layoutManager = getLayoutManager();                if (layoutManager instanceof GridLayoutManager) {                    //通过LayoutManager找到当前显示的最后的item的position                    lastPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition();                } else if (layoutManager instanceof LinearLayoutManager) {                    lastPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();                } else if (layoutManager instanceof StaggeredGridLayoutManager) {                    //因为StaggeredGridLayoutManager的特殊性可能导致最后显示的item存在多个,所以这里取到的是一个数组                    //得到这个数组后再取到数组中position值最大的那个就是最后显示的position值了                    int[] lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];                    ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(lastPositions);                    lastPosition = findMax(lastPositions);                }                //时判断界面显示的最后item的position是否等于itemCount总数-1也就是最后一个item的position                //如果相等则说明已经滑动到最后了                 if (lastPosition == getLayoutManager().getItemCount()-1 &&  this.computeVerticalScrollExtent() + this.computeVerticalScrollOffset()                        >= this.computeVerticalScrollRange()) {                    return true;                }            }        }        return false;    }    private int findMax(int[] lastPositions) {        int max = lastPositions[0];        for (int value : lastPositions) {            if (value > max) {                max = value;            }        }        return max;    }    private int findMin(int[] lastPositions) {        int min = lastPositions[0];        for (int value : lastPositions) {            if (value< min) {                min = value;            }        }        return min;    }}

 

 

更多相关文章

  1. android 实现下拉刷新
  2. 各种控件
  3. Android中控件的隐藏和显示
  4. ImageView下载图片加载
  5. Android(安卓)控件xml属性详解
  6. Android开发EditText属性
  7. 详解android:scaleType属性
  8. android中怎么让 button组件居中显示
  9. TextView 文字加图片显示效果

随机推荐

  1. Android Studio启动安卓虚拟机失败,附Andr
  2. Android按钮美化
  3. 安卓XML布局,相对布局的常用属性~
  4. android 自带的主题 theme 的使用
  5. 【eoeAndroid社区索引】android 条形码的
  6. android 之 install Location
  7. java解析json字符串的两种方法详解(Andro
  8. Android 输入限制
  9. 非一般的原因:Unable instantiate applica
  10. 实现Android简单动画旋转案例