/** * Created by lzy on 2017/6/6 0006. */ public class MySwipeRefreshLayout extends SwipeRefreshLayout{ private final TextView mFooterView; ListView view; OnListScrollListener listener; boolean isLoading;//判断当前layout是否在加载中,防止异步操作导致加载中再重复加载 boolean isShowing;//判断底部加载栏是否需要显示 Context mContext; public MySwipeRefreshLayout(Context context) { super(context); mContext = context; mFooterView = new TextView(mContext); mFooterView.setText("正在加载中"); mFooterView.setGravity(Gravity.CENTER); mFooterView.setTextSize(22); } public MySwipeRefreshLayout(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; mFooterView = new TextView(mContext); mFooterView.setText("正在加载中"); mFooterView.setGravity(Gravity.CENTER); mFooterView.setTextSize(22); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if(view ==null){ if(getChildAt(0)instanceof ListView){ view = (ListView)getChildAt(0); } } } /** * 在分发事件的时候处理子控件的触摸事件 * * @param ev * @return */ private float mDownY, mUpY, lastFloat ; @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // 移动的起点 mDownY = ev.getY(); break; case MotionEvent.ACTION_MOVE: float mMoveY = ev.getY(); // 移动过程中判断时候能上拉加载更多 if (isLoadMore()&&!isShowing&&lastFloat>mMoveY+5) { // 加载数据 setShowing(true); } lastFloat = mMoveY; break; case MotionEvent.ACTION_UP: // 移动的终点 mUpY = getY(); if (isShowing) { // 加载数据 if(listener!=null){ isLoading = true; listener.Refresh(); } } lastFloat = 0; break; } return super.dispatchTouchEvent(ev); } /** * 设置加载状态,是否加载传入boolean值进行判断 * * @param showing */ public void setShowing(boolean showing) { isShowing = showing; if (isShowing) { // 显示布局 view.addFooterView(mFooterView); } else { // 隐藏布局 view.removeFooterView(mFooterView); // 重置滑动的坐标 mDownY = 0; mUpY = 0; isLoading = showing; } } private synchronized boolean isLoadMore() { boolean isLast = view.getLastVisiblePosition() == view.getAdapter().getCount()-1; return isLast&&!isLoading; } public void setOnListScrollListener(OnListScrollListener listener){ this.listener = listener; } public interface OnListScrollListener{ void Refresh(); } }
自定义SwipeRefreshLayout实现上拉加载更多并自带系统的下拉刷新
最新推荐文章于 2021-05-25 16:34:12 发布