自定义ListView下拉刷新上拉加载更多功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ae_fring/article/details/51966183

篇的自定义listview包含下拉刷新和上拉加载更多都是自定义。如果你想把刷新的图片做的更炫只需要更换下图片加上适当的动画就OK咯!由于没有合适的图片就用了个粗糙的。不好看请见谅。

//部分代码(都做了注释):

/**
 * @author: ZQF_DemoStyle
 * @类 说 明: 自定义的ListView(带上拉加载下拉刷新)
 * @version 1.0
 * @创建时间:2016-7-14 上午10:21:51
 * 
 */
public class CusRefreshLisview extends ListView implements OnScrollListener,
		android.widget.AdapterView.OnItemClickListener {

	/***
	 * 状态判断 
	 * STATE_PULL_REFRESH :下拉刷新 
	 * STATE_RELEASE_REFRESH :松开刷新
	 * STATE_REFRESHING :正在刷新
	 */
	private static final int STATE_PULL_REFRESH = 0;
	private static final int STATE_RELEASE_REFRESH = 1;
	private static final int STATE_REFRESHING = 2;
	/***
	 * 当前的状态
	 */
	private int mCurrentState = STATE_PULL_REFRESH;
	/**
	 * 下拉刷新头部View加载更多脚布局View
	 */
	private View HeadView;
	private View FootView;
	/**
	 * 触摸时按下的Y坐标
	 */
	private int startY = -1;
	/**
	 * 移动最后的Y坐标
	 */
	private int endY;
	/**
	 * 计算的头部局高和脚部局的高
	 */
	private int mHeadViewHeight;
	private int mFootViewHeight;

	/**
	 * 箭头图片
	 */
	private ImageView iv_arr;
	/**
	 * 刷新标题
	 */
	private TextView tv_title;
	/**
	 * 刷新的时间
	 */
	private TextView tv_time;
	/**
	 * 正在刷新加载的ProgressBar
	 */
	private ProgressBar pb_progress;
	private RotateAnimation animationDown;
	private RotateAnimation animationUp;

	public CusRefreshLisview(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initHeadView();
		initFootView();

	}

	public CusRefreshLisview(Context context) {
		super(context);
		initHeadView();
		initFootView();
	}

	public CusRefreshLisview(Context context, AttributeSet attrs) {
		super(context, attrs);
		initHeadView();
		initFootView();
	}

	/**
	 * 
	 * @Title: initHeadView
	 * @说 明:初始化view
	 * @参 数:
	 * @return void 返回类型
	 * @throws
	 */
	private void initHeadView() {
		HeadView = View.inflate(getContext(), R.layout.refresh_layout, null);
		this.addHeaderView(HeadView);
		iv_arr = (ImageView) HeadView.findViewById(R.id.iv_arr);
		tv_title = (TextView) HeadView.findViewById(R.id.tv_title);
		tv_time = (TextView) HeadView.findViewById(R.id.tv_time);
		pb_progress = (ProgressBar) HeadView.findViewById(R.id.pb_progress);
		/**
		 * 计算头部局的高
		 */
		HeadView.measure(0, 0);
		mHeadViewHeight = HeadView.getMeasuredHeight();
		HeadView.setPadding(0, -mHeadViewHeight, 0, 0);
		initAnimation();
		tv_time.setText("最后刷新时间:" + getCurrenttime());
		/**
		 * 点击头部事件
		 */
		HeadView.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {

			}
		});
	}

	/**
	 * 初始化脚部局
	 */
	private void initFootView() {
		FootView = inflate(getContext(), R.layout.foot_layout, null);
		this.addFooterView(FootView);

		FootView.measure(0, 0);
		mFootViewHeight = FootView.getHeight();
		FootView.setPadding(0, -mFootViewHeight, 0, 0);

		// 滑动的监听
		this.setOnScrollListener(this);
		/**
		 * 点击脚部事件
		 */
		FootView.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {

			}
		});
	}
//附上是否启用listview头部,脚部,便于当不需要刷新功能或者加载更多时也能使用。


/***
	 * 是否禁用下拉刷新功能
	 */
	private boolean mHeadVisibility = true;

	public void setPulltoEnable(boolean flag) {
		mHeadVisibility = flag;
		if (!mHeadVisibility) {
			this.removeHeaderView(HeadView);
			HeadView.setVisibility(View.GONE);
		} else {
			HeadView.setVisibility(View.VISIBLE);
		}
	}

	/***
	 * 是否禁用上拉加载更多功能
	 */
	private boolean mFootVisibility;

	public void setPullLoadingEnable(boolean flag) {
		mFootVisibility = flag;
		if (!mFootVisibility) {
			this.removeFooterView(FootView);
			isLoadingMore = false;
			FootView.setVisibility(View.GONE);
		} else {
			isLoadingMore = true;
			FootView.setVisibility(View.VISIBLE);
		}
	}
// 注意 本篇里面的测试demo在调用刷新或者加载更多功能时候没有去onRefreshComplete完成会停在那,只需要在里面调用此方法处理即可
		// 刷新和加载更多方法
		mRefreshLisview.setRefreshListener(new OnRefreshListener() {

			@Override
			public void setRefresh() {
				//.......
			}

			@Override
			public void setLoadingMore() {
				//.......
			}
		});
来两张图看看吧,有些写的不如你意的,欢迎各位大神留言指点。

附上源码地址

扫描二维码关注公众号,回复: 4590512 查看本文章

猜你喜欢

转载自blog.csdn.net/Ae_fring/article/details/51966183