//自定义RefreshLayout 类
public class RefreshLayout extends SwipeRefreshLayout implements AbsListView.OnScrollListener {
private int mTouchSlop; //滑动到最下面时的上拉操作
private ListView mListView;
private OnLoadListener mOnLoadListener; //上拉加载监听
private View mListViewFooter; //底部加载时的布局
private int mYDown; //按下时的y坐标
private int mLastY; //抬起时的y坐标
private boolean isLoading; //是否正在加载
public RefreshLayout(Context context) {
this(context, null);
}
public RefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
//表示触发事件的最小距离
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mListViewFooter = LayoutInflater.from(context).inflate(R.layout.listview_footer, null, false);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
super.onLayout(changed, left, top, right, bottom);
//初始化listview对象
if (mListView == null) {
int childs = getChildCount();
if (childs > 0) {
View childView = getChildAt(0);
if (childView instanceof ListView) {
mListView = (ListView) childView;
mListView.setOnScrollListener(this);
}
}
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
mYDown = (int) ev.getRawY();
break;
case MotionEvent.ACTION_UP:
if (canLoad())
loadData();
break;
case MotionEvent.ACTION_MOVE:
mLastY = (int) ev.getRawY();
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
//判断是否可以加载更多
private boolean canLoad() {
return isBottom() && !isLoading && isPullUp();
}
//判断是否到达了底部
private boolean isBottom() {
if (mListView != null && mListView.getAdapter() != null) {
return mListView.getLastVisiblePosition() == (mListView.getAdapter().getCount() - 1);
}
return false;
}
//判断是否是上拉操作
private boolean isPullUp() {
return (mYDown - mLastY) >= mTouchSlop;
}
//加载操作
private void loadData() {
if (mOnLoadListener != null) {
setLoading(true);
mOnLoadListener.onLoad();
}
}
public void setLoading(boolean loading) {
isLoading = loading;
if (isLoading) {
mListView.addFooterView(mListViewFooter);
}
else {
mListView.removeFooterView(mListViewFooter);
mYDown = 0;
mLastY = 0;
}
}
public void setOnLoadListener(OnLoadListener loadListener) {
mOnLoadListener = loadListener;
}
@Override
public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
//滚动到底部也可以加载更多
if (canLoad()) {
loadData();
}
}
//加载更多的监听器
public static interface OnLoadListener {
public void onLoad();
}
}
在Activity中调用
private RefreshLayout swip;
swip = (RefreshLayout) findViewById(R.id.swip_index);
//设置滚动颜色,没有效果
swip.setColorSchemeColors(getResources().getColor(R.color.colorAccent), getResources().getColor(R.color.colorPrimary), getResources().getColor(R.color.colorPrimaryDark));
btn_newMisson.setOnClickListener(this);
//下拉刷新
swip.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swip.postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, "新数据加载完了", Toast.LENGTH_SHORT).show();
//关闭动画
swip.setRefreshing(false);
}
}, 3000);
}
});
//上划加载
swip.setOnLoadListener(new RefreshLayout.OnLoadListener() {
@Override
public void onLoad() {
swip.postDelayed(new Runnable() {
@Override
public void run() {
//假数据测试
for (int i = 0; i < 15; i++) {
MissionBean bean = new MissionBean();
bean.sn = "100" + i;
bean.job = "工作内容工作内容工作内容工作内容工作内容工作内容工作内容工作内容工作内容工作内容" + i;
bean.dept = "第" + i + "小组";
bean.isend = "0";
list.add(bean);
}
adapter = new MissionlistAdapter(mContext, list);
lv_mission.setAdapter(adapter);
adapter.notifyDataSetChanged();
swip.setLoading(false);//关闭动画
}
}, 3000);
}
});