1、添加项目依赖
api 'com.reoobter:ultrapullview:1.0.0'
2、xml文件中引入
3、下拉刷新、上拉加载的动画,是两个adapter
4、设置adapter:需要自己新建一个adapter,继承自BaseHeaderAdapter
refreshView.setBaseHeaderAdapter(new HeaderAdapter(getActivity()));
例如:
public class HeaderAdapter extends BaseHeaderAdapter {
private int viewHeight;
private LinearLayout headerLayout;
private TextView headerTv;
private float pullDistance;
public HeaderAdapter(Context context) {
super(context);
}
@Override
public View getHeaderView() {
View headerView = mInflater.inflate(R.layout.header_layout, null, false);
headerLayout = headerView.findViewById(R.id.header_layout);
headerTv = headerView.findViewById(R.id.header_tv);
//制定测量规则 参数表示size + mode
// int width = View.MeasureSpec.makeMeasureSpec(0,
// View.MeasureSpec.UNSPECIFIED);
// int height = View.MeasureSpec.makeMeasureSpec(0,
// View.MeasureSpec.UNSPECIFIED);
// //调用measure方法之后就可以获取宽高
// headerView.measure(width, height);
// viewHeight = headerView.getMeasuredHeight();
viewHeight = 120;
return headerView;
}
@Override
public void pullViewToRefresh(int deltaY) {
//这里乘以0.3 是因为UltimateRefreshView 源码中对于滑动有0.3的阻尼系数,为了保持一致
pullDistance = pullDistance + deltaY * 0.3f;
float scale = pullDistance / viewHeight;
headerLayout.setScaleX(scale);
headerLayout.setScaleY(scale);
headerTv.setText("下拉刷新");
}
@Override
public void releaseViewToRefresh(int deltaY) {
headerTv.setText("松开刷新");
}
@Override
public void headerRefreshing() {
headerTv.setText("正在刷新内容...");
}
@Override
public void headerRefreshComplete() {
headerLayout.setScaleX(0);
headerLayout.setScaleY(0);
pullDistance = 0;
headerTv.setText("下拉刷新");
}
}
5、设置刷新监听
refreshView.setOnHeaderRefreshListener(new OnHeaderRefreshListener() {
@Override
public void onHeaderRefresh(UltimateRefreshView view) {
//刷新数据
//
}
});
6、上拉加载更多,需要自己新建一个adapter继承自BaseFooterAdapter
例如:
refreshView.setBaseFooterAdapter(new FooterAdapter(getActivity()));
refreshView.setOnFooterRefreshListener(new OnFooterRefreshListener() { @Override public void onFooterRefresh(UltimateRefreshView view) { // 加载更多数据 // } });
public class FooterAdapter extends BaseFooterAdapter {
private int viewHeight;
private LinearLayout headerLayout;
private TextView headerTv;;
private float pullDistance;
public FooterAdapter(Context context) {
super(context);
}
@Override
public View getFooterView() {
View headerView = mInflater.inflate(R.layout.header_layout, null, false);
headerLayout = headerView.findViewById(R.id.header_layout);
headerTv = headerView.findViewById(R.id.header_tv);
viewHeight = 120;
return headerView;
}
@Override
public void pullViewToRefresh(int deltaY) {
//这里乘以0.3 是因为UltimateRefreshView 源码中对于滑动有0.3的阻尼系数,为了保持一致
pullDistance = pullDistance + -1*deltaY * 0.3f;
float scale = pullDistance / viewHeight;
headerLayout.setScaleX(1.2f);
headerLayout.setScaleY(1.2f);
headerTv.setText("上拉加载更多");
}
@Override
public void releaseViewToRefresh(int deltaY) {
headerTv.setText("松开加载");
}
@Override
public void footerRefreshing() {
headerTv.setText("正在加载中...");
}
@Override
public void footerRefreshComplete() {
headerLayout.setScaleX(0);
headerLayout.setScaleY(0);
pullDistance = 0;
headerTv.setText("上拉加载更多");
}
}
以上是简单使用,可以查看源码,实现更多动画效果