刚来注册博客,在这里住脚。自定义listView下拉刷新

来源:互联网 发布:java简单项目 编辑:程序博客网 时间:2024/05/17 02:27

对于csdn刚认识,新人在此报道下,留下自己的轨迹

import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.TextView;

public class CustomListView extends ListView{View viewHeader;    private static int state_done=1;    private static int state_pull=2;    private static int state_release=3;    private static int state_refreshing=4;    int currentState;  int height;    int downY;    TextView stState;    ImageView ivArrow;    ProgressBar progressBar;    public CustomListView(Context context, AttributeSet attrs) {        super(context, attrs);        currentState=state_done;        viewHeader = View.inflate(context, R.layout.listview_header, null);        ivArrow = (ImageView) viewHeader.findViewById(R.id.iv_arrow);        stState = (TextView) viewHeader.findViewById(R.id.tv_state);        progressBar = (ProgressBar) viewHeader.findViewById(R.id.progressBar);        this.addHeaderView(viewHeader);        viewHeader.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED);       // height=view.viewHeader.getHeight();  必须先测量,才能用getMeasuredHeight 方法        //  UNSPECIFIED :  测量方式是不指定的        height=viewHeader.getMeasuredHeight();        viewHeader.setPadding(0,-height,0,0);    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        try{            int action=ev.getAction();            switch (action){                case  MotionEvent.ACTION_DOWN:                    if(currentState==state_done){                        currentState=state_pull;                        downY= (int) ev.getY();                    }                    break;                case  MotionEvent.ACTION_MOVE:                    if(currentState==state_pull){                        int moveY= (int) ev.getY();                        if(moveY-downY>height){                            currentState=state_release;                            stState.setText("松开刷新");                        }                        moveY=moveY-height-downY;                        Log.i("下来刷新","moveY"+moveY);                        viewHeader.setPadding(0,moveY,0,0);                    }                    break;                case MotionEvent.ACTION_UP:                    if(currentState==state_release){                        stState.setText("正在刷新");                        ivArrow.setVisibility(GONE);                        progressBar.setVisibility(View.VISIBLE);                        //  调用接口                        if(onRefreshingListener!=null){                            onRefreshingListener.onRefreshing(this);                        }                    }                    break;            }        }catch (Exception e){            e.printStackTrace();        }finally{        }        return super.onTouchEvent(ev);    }    public void  setOnRefreshingListener(OnRefreshingListener onRefreshingListener){        this.onRefreshingListener=onRefreshingListener;    }    // 2.申明接口    OnRefreshingListener onRefreshingListener;    // 1. 定义接口    interface OnRefreshingListener{        void  onRefreshing(CustomListView customListView);    }    public void completeRefresh(){        currentState=state_done;        stState.setText("下拉刷新");        ivArrow.setVisibility(VISIBLE);        progressBar.setVisibility(GONE);        viewHeader.setPadding(0,-height,0,0);    }}

0 0