下拉刷新,加载更多的实现

来源:互联网 发布: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
原创粉丝点击