下拉刷新,加载更多的实现
来源:互联网 发布:ettercap linux 安装 编辑:程序博客网 时间:2024/05/20 17:27
1.自定义VIEW继承自ListView。
2.在布局中引入自定义View
3.` public void initView() {
view = View.inflate(getContext(), R.layout.refreshview, null);//加载头布局 this.addHeaderView(view);//添加头布局 view.measure(0, 0);//测量头布局 measuredHeight = view.getMeasuredHeight(); //设置Padding隐藏头布局 view.setPadding(0, -measuredHeight, 0, 0);`}
4.设置ListView的触摸事件,
public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: //按下时记录Y至 startY = (int) ev.getRawY(); Log.e("startY", startY + ""); // mCurrentState=0; break; case MotionEvent.ACTION_MOVE: //检测StartY是否有效 if (startY == -1) { startY = (int) ev.getRawY(); } //记录三种状态,如果是下拉刷新的状态, if (mCurrentState == 2) { break; } endY = (int) ev.getRawY(); y1 = endY - startY; //如果是向下拖动,并且第一个可见条目是第一个才响应 if (y1 > 0 && getFirstVisiblePosition() == 0) { padding = y1 - measuredHeight; //记录状态,并且判断是否状态更改。不再重复赋值 if (padding > 0 && mCurrentState != STATE_SHIFNAG) { mCurrentState = STATE_SHIFNAG; frashview(); } else if (padding < 0 && mCurrentState != STATE_XIALA) { mCurrentState = STATE_XIALA; frashview(); } view.setPadding(0, padding, 0, 0); return true; } break; case MotionEvent.ACTION_UP: //抬起是重置startY; startY = -1; //如果是释放刷新状态就调用方法,如果是下拉刷新状态就返回初始 if (mCurrentState == STATE_XIALA) { // mCurrentState = STATE_SHUAXINZHONG; frashview(); view.setPadding(0, -measuredHeight, 0, 0); } else if (mCurrentState == 1) { mCurrentState = 2; view.setPadding(0, 0, 0, 0); frashview(); } break; default: break;`这里写代码片` } return super.onTouchEvent(ev); }
5。自己定义frashview()的方法
private void frashview() { switch (mCurrentState) { case STATE_XIALA: tv1.setText("下拉刷新"); img.setVisibility(View.VISIBLE); tv1.setVisibility(View.VISIBLE); img.startAnimation(rdown); pb1.setVisibility(View.INVISIBLE); break; case STATE_SHIFNAG: tv1.setText("松开刷新"); img.setVisibility(View.VISIBLE); img.startAnimation(rup); pb1.setVisibility(View.INVISIBLE); break; case STATE_SHUAXINZHONG: tv1.setText("正在刷新刷新"); img.clearAnimation(); img.setVisibility(View.INVISIBLE); pb1.setVisibility(View.VISIBLE); if (mListener != null) { mListener.OnRefrsh(); } break; default: break; } }
6,自定义一个借口
public OnRefreshListener mListener;
public void SetOnRdfreshListener(OnRefreshListener listener) { mListener = listener;}public interface OnRefreshListener { public void OnRefrsh(); public void OnLoadMore();}在LISTView中实现逻辑
7.在定义获取成功的方法,再在子类中调用重新获取数据,`
public void OnRefreshComplete(boolean susscess) { if (isLoadMore = true) { isLoadMore = false; view1.setPadding(0, -measuredHeight1, 0, 0); } mCurrentState = 0; img.setVisibility(View.VISIBLE); tv1.setVisibility(View.VISIBLE); img.startAnimation(rdown); pb1.setVisibility(View.INVISIBLE); view.setPadding(0, -measuredHeight, 0, 0); if (susscess) { tv2.setText("最后刷新时间" + GetCurrentTime()); }}`
通过是否LoadMore判断是否为加载更多
8. 因为添加了头布局和脚布局,子类调用此方法是会得不到正确的positin,在自定义View中封装。
OnItemClickListener mlistener; @Override public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener listener) { // TODO Auto-generated method stub super.setOnItemClickListener(this); mlistener=listener; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub mlistener.onItemClick(parent, view, position-getHeaderViewsCount(), id); }
0 0
- 下拉刷新,加载更多的实现
- MaterialRefreshLayout实现下拉刷新,下拉加载更多
- Android ListView下拉刷新上拉加载更多的实现
- Android实现下拉刷新,滑动加载更多的功能
- listview下拉刷新,上拉加载更多的实现方法
- 下拉刷新、上拉加载更多功能的实现
- 轻松实现RecycleView的下拉刷新、加载更多
- Android实现ListView的下拉刷新、上拉加载更多
- ListView下拉刷新和上拉加载更多的实现
- RecyclerView 上拉加载更多下拉刷新的一种实现
- Android ListView实现下拉刷新、加载更多
- 自定义RecyclerView实现下拉刷新,加载更多
- 下拉刷新--加载更多
- ListView的下拉刷新,点击加载更多
- 自定义的RecyclerView, 下拉刷新,加载更多.
- 支持任意View下拉刷新/下拉加载更多的控件
- Android 下拉刷新加载更多
- ListView 下拉刷新 加载更多
- 【以太网数据结构】IP协议
- pat1041Be Unique (20)
- 项目36.3消除多余的空格
- __bridge 等方法的使用
- 【黑马程序员】【C语言】我的第一个C程序
- 下拉刷新,加载更多的实现
- 分治法排序——C++实现
- 熟悉DEBUG调试环境试验
- 直方图均衡化
- AsyncTask
- llvm之IR手册翻译(1)
- [产品经理]如何分析APP功能需求、结构?
- 消息队列
- iOS GCD