自定义SwipeRefreshLayout实现上拉加载更多并自带系统的下拉刷新
2017-06-06 16:37
525 查看
/** * 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 ; bcd7 @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(); } }
相关文章推荐
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android中自定义ListView实现上拉加载更多和下拉刷新
- 自定义上拉加载下拉刷新控件,从而实现滑动到底部时上拉加载更多的功能
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI自定义ListView实现下拉刷新和加载更多效果
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 教你自定义ListView实现下拉刷新,上拉加载更多
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 自定义RecyclerView实现下拉刷新,加载更多
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 偷懒了一天,去给人装系统去了~ 今天继续更 自己敲代码实现下拉刷新上滑加载更多
- 使用SwipeRefreshLayout和自定义listview实现下拉刷新上啦加载更多
- 自定义ListView实现下拉刷新,上拉加载更多
- 使用SwipeRefreshLayout和自定义的PullToReFreshListView实现下拉刷新和上拉加载更多
- Android从零开搞系列:自定义View(2)继承RecyclerView实现下拉刷新和加载更多
- Android UI--自定义ListView(实现下拉刷新+加载更多)