|
|
|
|
@ -1,40 +1,45 @@
|
|
|
|
|
package com.monke.monkeybook.widget.refreshview;
|
|
|
|
|
package com.monke.monkeybook.widget.refreshview; // 定义包名
|
|
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
import android.content.res.TypedArray;
|
|
|
|
|
import android.support.v7.widget.LinearLayoutManager;
|
|
|
|
|
import android.support.v7.widget.RecyclerView;
|
|
|
|
|
import android.util.AttributeSet;
|
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
|
import android.view.MotionEvent;
|
|
|
|
|
import android.view.View;
|
|
|
|
|
import android.widget.FrameLayout;
|
|
|
|
|
import android.content.Context; // 导入 Context 类,提供应用的上下文
|
|
|
|
|
import android.content.res.TypedArray; // 导入 TypedArray 类,用于处理自定义属性
|
|
|
|
|
import android.support.v7.widget.LinearLayoutManager; // 导入 LinearLayoutManager 类,用于线性布局管理器
|
|
|
|
|
import android.support.v7.widget.RecyclerView; // 导入 RecyclerView 类,支持高效的列表展示
|
|
|
|
|
import android.util.AttributeSet; // 导入 AttributeSet 类,用于访问 XML 布局中的自定义属性
|
|
|
|
|
import android.view.LayoutInflater; // 导入 LayoutInflater 类,用于将布局文件转换为 View 对象
|
|
|
|
|
import android.view.MotionEvent; // 导入 MotionEvent 类,处理触摸事件
|
|
|
|
|
import android.view.View; // 导入 View 类,所有 UI 控件的基类
|
|
|
|
|
import android.widget.FrameLayout; // 导入 FrameLayout 类,按层次排列子视图
|
|
|
|
|
|
|
|
|
|
import com.monke.monkeybook.R;
|
|
|
|
|
import com.monke.monkeybook.R; // 导入应用资源类,访问资源文件
|
|
|
|
|
|
|
|
|
|
// 创建 RefreshRecyclerView 类,继承自 FrameLayout
|
|
|
|
|
public class RefreshRecyclerView extends FrameLayout {
|
|
|
|
|
private View view;
|
|
|
|
|
private RefreshProgressBar rpb;
|
|
|
|
|
private RecyclerView recyclerView;
|
|
|
|
|
private View view; // 根视图
|
|
|
|
|
private RefreshProgressBar rpb; // 自定义进度条
|
|
|
|
|
private RecyclerView recyclerView; // RecyclerView 控件
|
|
|
|
|
|
|
|
|
|
private View noDataView;
|
|
|
|
|
private View refreshErrorView;
|
|
|
|
|
private View noDataView; // 无数据视图
|
|
|
|
|
private View refreshErrorView; // 刷新错误视图
|
|
|
|
|
|
|
|
|
|
// 构造函数
|
|
|
|
|
public RefreshRecyclerView(Context context) {
|
|
|
|
|
this(context, null);
|
|
|
|
|
this(context, null); // 调用带有 AttributeSet 的构造函数
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public RefreshRecyclerView(Context context, AttributeSet attrs) {
|
|
|
|
|
this(context, attrs, 0);
|
|
|
|
|
this(context, attrs, 0); // 调用带有默认样式的构造函数
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public RefreshRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
|
|
|
super(context, attrs, defStyleAttr);
|
|
|
|
|
|
|
|
|
|
// 从 XML 布局中加载视图
|
|
|
|
|
view = LayoutInflater.from(context).inflate(R.layout.view_refresh_recyclerview, this, false);
|
|
|
|
|
// 初始化 UI 组件
|
|
|
|
|
rpb = (RefreshProgressBar) view.findViewById(R.id.rpb);
|
|
|
|
|
recyclerView = (RecyclerView) view.findViewById(R.id.rv);
|
|
|
|
|
|
|
|
|
|
// 获取自定义属性并设置给 RefreshProgressBar
|
|
|
|
|
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RefreshProgressBar);
|
|
|
|
|
rpb.setSpeed(a.getDimensionPixelSize(R.styleable.RefreshProgressBar_speed, rpb.getSpeed()));
|
|
|
|
|
rpb.setMaxProgress(a.getInt(R.styleable.RefreshProgressBar_max_progress, rpb.getMaxProgress()));
|
|
|
|
|
@ -42,235 +47,253 @@ public class RefreshRecyclerView extends FrameLayout {
|
|
|
|
|
rpb.setBgColor(a.getColor(R.styleable.RefreshProgressBar_bg_color, rpb.getBgColor()));
|
|
|
|
|
rpb.setSecondColor(a.getColor(R.styleable.RefreshProgressBar_second_color, rpb.getSecondColor()));
|
|
|
|
|
rpb.setFontColor(a.getColor(R.styleable.RefreshProgressBar_font_color, rpb.getFontColor()));
|
|
|
|
|
a.recycle();
|
|
|
|
|
a.recycle(); // 释放 TypedArray
|
|
|
|
|
|
|
|
|
|
bindEvent();
|
|
|
|
|
|
|
|
|
|
addView(view);
|
|
|
|
|
bindEvent(); // 绑定事件
|
|
|
|
|
addView(view); // 将根视图添加到 FrameLayout 中
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private float durTouchY = -1000000;
|
|
|
|
|
private BaseRefreshListener baseRefreshListener;
|
|
|
|
|
private float durTouchY = -1000000; // 记录触摸 Y 坐标
|
|
|
|
|
private BaseRefreshListener baseRefreshListener; // 刷新监听器
|
|
|
|
|
|
|
|
|
|
// 设置刷新监听器
|
|
|
|
|
public void setBaseRefreshListener(BaseRefreshListener baseRefreshListener) {
|
|
|
|
|
this.baseRefreshListener = baseRefreshListener;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private OnLoadMoreListener loadMoreListener;
|
|
|
|
|
private OnLoadMoreListener loadMoreListener; // 加载更多监听器
|
|
|
|
|
|
|
|
|
|
// 设置加载更多监听器
|
|
|
|
|
public void setLoadMoreListener(OnLoadMoreListener loadMoreListener) {
|
|
|
|
|
this.loadMoreListener = loadMoreListener;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 绑定事件
|
|
|
|
|
private void bindEvent() {
|
|
|
|
|
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
|
|
|
|
super.onScrollStateChanged(recyclerView, newState);
|
|
|
|
|
super.onScrollStateChanged(recyclerView, newState); // 调用父类方法
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
|
|
|
|
super.onScrolled(recyclerView, dx, dy);
|
|
|
|
|
if (((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).canLoadMore() && ((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getItemCount() - 1 == ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition()) {
|
|
|
|
|
if(!((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getLoadMoreError()){
|
|
|
|
|
super.onScrolled(recyclerView, dx, dy); // 调用父类方法
|
|
|
|
|
// 判断是否可以加载更多
|
|
|
|
|
if (((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).canLoadMore() &&
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getItemCount() - 1
|
|
|
|
|
== ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition()) {
|
|
|
|
|
|
|
|
|
|
// 如果没有加载错误,开始加载更多
|
|
|
|
|
if (!((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getLoadMoreError()) {
|
|
|
|
|
if (null != loadMoreListener) {
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(2, false);
|
|
|
|
|
loadMoreListener.startLoadmore();
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(2, false); // 设置为正在加载更多状态
|
|
|
|
|
loadMoreListener.startLoadmore(); // 调用加载更多方法
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
recyclerView.setOnTouchListener(refreshTouchListener);
|
|
|
|
|
recyclerView.setOnTouchListener(refreshTouchListener); // 设置触摸事件监听器
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取自定义进度条
|
|
|
|
|
public RefreshProgressBar getRpb() {
|
|
|
|
|
return rpb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取 RecyclerView
|
|
|
|
|
public RecyclerView getRecyclerView() {
|
|
|
|
|
return recyclerView;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理刷新错误
|
|
|
|
|
public void refreshError() {
|
|
|
|
|
rpb.setIsAutoLoading(false);
|
|
|
|
|
rpb.clean();
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, true);
|
|
|
|
|
rpb.setIsAutoLoading(false); // 设置为非自动加载状态
|
|
|
|
|
rpb.clean(); // 清空进度
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, true); // 设置请求状态为未请求
|
|
|
|
|
if (noDataView != null) {
|
|
|
|
|
noDataView.setVisibility(GONE);
|
|
|
|
|
noDataView.setVisibility(GONE); // 隐藏无数据视图
|
|
|
|
|
}
|
|
|
|
|
if (refreshErrorView != null) {
|
|
|
|
|
refreshErrorView.setVisibility(VISIBLE);
|
|
|
|
|
refreshErrorView.setVisibility(VISIBLE); // 显示刷新错误视图
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 开始刷新
|
|
|
|
|
public void startRefresh() {
|
|
|
|
|
if (baseRefreshListener != null && baseRefreshListener instanceof OnRefreshWithProgressListener) {
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(false, false);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, false);
|
|
|
|
|
rpb.setSecondDurProgress(rpb.getSecondMaxProgress());
|
|
|
|
|
rpb.setMaxProgress(((OnRefreshWithProgressListener) baseRefreshListener).getMaxProgress());
|
|
|
|
|
// 带有进度的刷新
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(false, false); // 设置还有更多数据
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, false); // 设置为正在刷新状态
|
|
|
|
|
rpb.setSecondDurProgress(rpb.getSecondMaxProgress()); // 设置当前进度为最大进度
|
|
|
|
|
rpb.setMaxProgress(((OnRefreshWithProgressListener) baseRefreshListener).getMaxProgress()); // 获取最大进度
|
|
|
|
|
} else {
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, true);
|
|
|
|
|
rpb.setIsAutoLoading(true);
|
|
|
|
|
// 非带进度的刷新
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, true); // 设置为正在刷新状态
|
|
|
|
|
rpb.setIsAutoLoading(true); // 设置为自动加载
|
|
|
|
|
if (noDataView != null) {
|
|
|
|
|
noDataView.setVisibility(GONE);
|
|
|
|
|
noDataView.setVisibility(GONE); // 隐藏无数据视图
|
|
|
|
|
}
|
|
|
|
|
if (refreshErrorView != null) {
|
|
|
|
|
refreshErrorView.setVisibility(GONE);
|
|
|
|
|
refreshErrorView.setVisibility(GONE); // 隐藏刷新错误视图
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 完成刷新
|
|
|
|
|
public void finishRefresh(Boolean needNoti) {
|
|
|
|
|
finishRefresh(((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getItemcount() == 0, needNoti);
|
|
|
|
|
finishRefresh(((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getItemcount() == 0, needNoti); // 判断是否有数据并完成刷新
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 完成刷新,判断是否还有更多数据
|
|
|
|
|
public void finishRefresh(Boolean isAll, Boolean needNoti) {
|
|
|
|
|
rpb.setDurProgress(0);
|
|
|
|
|
rpb.setDurProgress(0); // 重置进度条
|
|
|
|
|
if (isAll) {
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, false);
|
|
|
|
|
rpb.setIsAutoLoading(false);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(isAll, needNoti);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, false); // 设置请求状态为未请求
|
|
|
|
|
rpb.setIsAutoLoading(false); // 设置为非自动加载状态
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(isAll, needNoti); // 设置没有更多数据
|
|
|
|
|
} else {
|
|
|
|
|
rpb.setIsAutoLoading(false);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, needNoti);
|
|
|
|
|
rpb.setIsAutoLoading(false); // 设置为非自动加载状态
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, needNoti); // 设置请求状态为未请求
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 根据数据情况显示无数据视图
|
|
|
|
|
if (isAll) {
|
|
|
|
|
if (noDataView != null) {
|
|
|
|
|
if (((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getItemcount() == 0)
|
|
|
|
|
noDataView.setVisibility(VISIBLE);
|
|
|
|
|
noDataView.setVisibility(VISIBLE); // 如果没有数据,则显示无数据视图
|
|
|
|
|
else
|
|
|
|
|
noDataView.setVisibility(GONE);
|
|
|
|
|
noDataView.setVisibility(GONE); // 否则隐藏无数据视图
|
|
|
|
|
}
|
|
|
|
|
if (refreshErrorView != null) {
|
|
|
|
|
refreshErrorView.setVisibility(GONE);
|
|
|
|
|
refreshErrorView.setVisibility(GONE); // 隐藏刷新错误视图
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 完成加载更多
|
|
|
|
|
public void finishLoadMore(Boolean isAll, Boolean needNoti) {
|
|
|
|
|
if (isAll) {
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, false);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(isAll, needNoti);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, false); // 设置请求状态为未请求
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(isAll, needNoti); // 设置没有更多数据
|
|
|
|
|
} else {
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, needNoti);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(0, needNoti); // 设置请求状态为未请求
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (noDataView != null) {
|
|
|
|
|
noDataView.setVisibility(GONE);
|
|
|
|
|
noDataView.setVisibility(GONE); // 隐藏无数据视图
|
|
|
|
|
}
|
|
|
|
|
if (refreshErrorView != null) {
|
|
|
|
|
refreshErrorView.setVisibility(GONE);
|
|
|
|
|
refreshErrorView.setVisibility(GONE); // 隐藏刷新错误视图
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置适配器
|
|
|
|
|
public void setRefreshRecyclerViewAdapter(RefreshRecyclerViewAdapter refreshRecyclerViewAdapter, RecyclerView.LayoutManager layoutManager) {
|
|
|
|
|
refreshRecyclerViewAdapter.setClickTryAgainListener(new RefreshRecyclerViewAdapter.OnClickTryAgainListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void loadMoreErrorTryAgain() {
|
|
|
|
|
if (loadMoreListener != null)
|
|
|
|
|
loadMoreListener.loadMoreErrorTryAgain();
|
|
|
|
|
loadMoreListener.loadMoreErrorTryAgain(); // 处理加载更多错误重试
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
recyclerView.setLayoutManager(layoutManager);
|
|
|
|
|
recyclerView.setAdapter(refreshRecyclerViewAdapter);
|
|
|
|
|
recyclerView.setLayoutManager(layoutManager); // 设置布局管理器
|
|
|
|
|
recyclerView.setAdapter(refreshRecyclerViewAdapter); // 设置适配器
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 加载更多错误
|
|
|
|
|
public void loadMoreError() {
|
|
|
|
|
rpb.setIsAutoLoading(false);
|
|
|
|
|
rpb.clean();
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setLoadMoreError(true, true);
|
|
|
|
|
rpb.setIsAutoLoading(false); // 设置为非自动加载状态
|
|
|
|
|
rpb.clean(); // 清空进度
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setLoadMoreError(true, true); // 设置加载错误状态
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置无数据视图和刷新错误视图
|
|
|
|
|
public void setNoDataAndrRefreshErrorView(View noData, View refreshError) {
|
|
|
|
|
if (noData != null) {
|
|
|
|
|
noDataView = noData;
|
|
|
|
|
// noDataView.setOnTouchListener(refreshTouchListener);
|
|
|
|
|
noDataView.setVisibility(GONE);
|
|
|
|
|
addView(noDataView, getChildCount() - 1);
|
|
|
|
|
|
|
|
|
|
noDataView = noData; // 设置无数据视图
|
|
|
|
|
noDataView.setVisibility(GONE); // 隐藏无数据视图
|
|
|
|
|
addView(noDataView, getChildCount() - 1); // 将视图添加到 FrameLayout 中
|
|
|
|
|
}
|
|
|
|
|
if (refreshError != null) {
|
|
|
|
|
refreshErrorView = refreshError;
|
|
|
|
|
// refreshErrorView.setOnTouchListener(refreshTouchListener);
|
|
|
|
|
addView(refreshErrorView, 2);
|
|
|
|
|
refreshErrorView.setVisibility(GONE);
|
|
|
|
|
refreshErrorView = refreshError; // 设置刷新错误视图
|
|
|
|
|
addView(refreshErrorView, 2); // 将视图添加到 FrameLayout 中
|
|
|
|
|
refreshErrorView.setVisibility(GONE); // 隐藏刷新错误视图
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private OnTouchListener refreshTouchListener = new OnTouchListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public boolean onTouch(View v, MotionEvent event) {
|
|
|
|
|
int action = event.getAction();
|
|
|
|
|
int action = event.getAction(); // 获取触摸事件动作
|
|
|
|
|
switch (action) {
|
|
|
|
|
case MotionEvent.ACTION_DOWN:
|
|
|
|
|
durTouchY = event.getY();
|
|
|
|
|
case MotionEvent.ACTION_DOWN: // 触摸开始时
|
|
|
|
|
durTouchY = event.getY(); // 记录 Y 坐标
|
|
|
|
|
break;
|
|
|
|
|
case MotionEvent.ACTION_MOVE:
|
|
|
|
|
case MotionEvent.ACTION_MOVE: // 触摸移动时
|
|
|
|
|
if (durTouchY == -1000000)
|
|
|
|
|
durTouchY = event.getY();
|
|
|
|
|
float dY = event.getY() - durTouchY; //>0下拉
|
|
|
|
|
durTouchY = event.getY();
|
|
|
|
|
durTouchY = event.getY(); // 初始化 Y 坐标
|
|
|
|
|
float dY = event.getY() - durTouchY; // 计算下拉距离
|
|
|
|
|
durTouchY = event.getY(); // 更新 Y 坐标
|
|
|
|
|
// 判断是否可以刷新
|
|
|
|
|
if (baseRefreshListener != null && ((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getIsRequesting() == 0 && rpb.getSecondDurProgress() == rpb.getSecondFinalProgress()) {
|
|
|
|
|
if (rpb.getVisibility() != View.VISIBLE) {
|
|
|
|
|
rpb.setVisibility(View.VISIBLE);
|
|
|
|
|
rpb.setVisibility(View.VISIBLE); // 显示进度条
|
|
|
|
|
}
|
|
|
|
|
if (recyclerView.getAdapter().getItemCount() > 0) {
|
|
|
|
|
if (0 == ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition()) {
|
|
|
|
|
rpb.setSecondDurProgress((int) (rpb.getSecondDurProgress() + dY));
|
|
|
|
|
rpb.setSecondDurProgress((int) (rpb.getSecondDurProgress() + dY)); // 更新进度
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
rpb.setSecondDurProgress((int) (rpb.getSecondDurProgress() + dY));
|
|
|
|
|
rpb.setSecondDurProgress((int) (rpb.getSecondDurProgress() + dY)); // 更新进度
|
|
|
|
|
}
|
|
|
|
|
if (rpb.getSecondDurProgress() <= 0) {
|
|
|
|
|
return false;
|
|
|
|
|
return false; // 返回 false 继续处理
|
|
|
|
|
} else {
|
|
|
|
|
return true;
|
|
|
|
|
return true; // 返回 true 终止触摸事件继续处理
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MotionEvent.ACTION_UP:
|
|
|
|
|
case MotionEvent.ACTION_UP: // 触摸抬起时
|
|
|
|
|
// 判断是否能开始刷新
|
|
|
|
|
if (baseRefreshListener != null && rpb.getSecondMaxProgress() > 0 && rpb.getSecondDurProgress() > 0) {
|
|
|
|
|
if (rpb.getSecondDurProgress() >= rpb.getSecondMaxProgress() && ((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getIsRequesting() == 0) {
|
|
|
|
|
if (baseRefreshListener instanceof OnRefreshWithProgressListener) {
|
|
|
|
|
//带有进度的
|
|
|
|
|
//执行刷新响应
|
|
|
|
|
// 带有进度的刷新
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(false, false);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, true);
|
|
|
|
|
rpb.setMaxProgress(((OnRefreshWithProgressListener) baseRefreshListener).getMaxProgress());
|
|
|
|
|
baseRefreshListener.startRefresh();
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, true); // 设置为正在刷新状态
|
|
|
|
|
rpb.setMaxProgress(((OnRefreshWithProgressListener) baseRefreshListener).getMaxProgress()); // 获取最大进度
|
|
|
|
|
baseRefreshListener.startRefresh(); // 执行刷新
|
|
|
|
|
if (noDataView != null) {
|
|
|
|
|
noDataView.setVisibility(GONE);
|
|
|
|
|
noDataView.setVisibility(GONE); // 隐藏无数据视图
|
|
|
|
|
}
|
|
|
|
|
if (refreshErrorView != null) {
|
|
|
|
|
refreshErrorView.setVisibility(GONE);
|
|
|
|
|
refreshErrorView.setVisibility(GONE); // 隐藏刷新错误视图
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
//不带进度的
|
|
|
|
|
// 不带进度的刷新
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsAll(false, false);
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, true);
|
|
|
|
|
baseRefreshListener.startRefresh();
|
|
|
|
|
((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).setIsRequesting(1, true); // 设置为正在刷新状态
|
|
|
|
|
baseRefreshListener.startRefresh(); // 执行刷新
|
|
|
|
|
if (noDataView != null) {
|
|
|
|
|
noDataView.setVisibility(GONE);
|
|
|
|
|
noDataView.setVisibility(GONE); // 隐藏无数据视图
|
|
|
|
|
}
|
|
|
|
|
if (refreshErrorView != null) {
|
|
|
|
|
refreshErrorView.setVisibility(GONE);
|
|
|
|
|
refreshErrorView.setVisibility(GONE); // 隐藏刷新错误视图
|
|
|
|
|
}
|
|
|
|
|
rpb.setIsAutoLoading(true);
|
|
|
|
|
rpb.setIsAutoLoading(true); // 设置为自动加载状态
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (((RefreshRecyclerViewAdapter) recyclerView.getAdapter()).getIsRequesting() != 1)
|
|
|
|
|
rpb.setSecondDurProgressWithAnim(0);
|
|
|
|
|
rpb.setSecondDurProgressWithAnim(0); // 动画归零
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
durTouchY = -1000000;
|
|
|
|
|
durTouchY = -1000000; // 重置 Y 坐标
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
return false; // 返回 false 继续处理触摸事件
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|