# SwipeView **Repository Path**: DecviLGroup/SwipeView ## Basic Information - **Project Name**: SwipeView - **Description**: 提供下拉刷新,上拉加载更多。 - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-11-23 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通用刷新加载组件 提供常用的下拉刷新、上拉加载功能,为项目快速提供此能力,节省开发时间。 ## 特性 * 支持任意View * 支持自动加载 * 支持自定义刷新和加载布局 * 支持嵌套滑动 ## 使用方法 ### 基本用法 默认使用Google SwipeLayout风格,只需要设置刷新和加载监听,即可使用。 ```java //构建 SwipeView swipeView = SwipeView.with(targetView).onRefresh(this).onLoadMore(this).build(); ``` #### SwipeView Build配置参数说明: | 方法 | 说明 | | ---------------------------------------- | -------------------- | | onRefresh(OnRefreshListener listener) | 设置刷新监听事件 | | onLoadMore(OnLoadMoreListener listener) | 设置加载更多监听事件 | | onLoadRetry(OnLoadRetryListener listener) | 设置加载重试监听(仅在自动加载模式有效) | | refreshEnable(boolean enable) | 设置是否允许刷新 | | loadMoreEnable(boolean enable) | 设置是否允许加载更多 | | refreshView(View refreshView) | 设置刷新自定义视图 | | refreshView(int viewId) | 设置刷新自定义布局ID | | loadMoreView(View loadMoreView) | 设置加载更多自定义视图 | | loadMoreView(int viewId) | 设置加载更多自定义布局ID | | autoLoadMore(boolean isAuto) | 设置是否开启自动加载模式 | | style(int style) | 设置显示的样式,详情查看样式说明 | #### Style (SwipeLayout.STYLE)样式说明: | 类型 | 说明 | | ------- | ---------------------------------------- | | CLASSIC | 在拖动过程在,始终会跟随在TargetView的位置 | | ABOVE | 在拖动过程中,始终在TargetView的上面,适用于Google SwipeLayout | | BLEW | 在拖动过程中,始终在TargetView的下面,不会跟随TargetView的位置变化 | | SCALE | 在拖动过程中,始终保持在内容居中的位置 | #### Swipe 公共方法 | 方法 | 说明 | | ---------------------------------------- | ----------- | | startFirstRefresh() | 页面进入后启动首次刷新 | | setRefreshing(boolean isRefreshing) | 设置是否在刷新状态 | | setLoadingMore(boolean isLoadingMore) | 设置是否在加载 | | setRefreshEnabled(boolean refreshEnabled) | 设置是否允许刷新 | | setLoadMoreEnable(boolean loadMoreEnable) | 设置是否允许加载 | 一个使用RecycleView的简单的代码示例:MainActivity #### 自动加载模式 当列表滑动到底部,自动加载的场景也是非常常用的。 默认用法如下: ```java SwipeView.with(recyclerView) //这里使用组件默认的布局,用户可以自定义布局 .loadMoreView(R.layout.esv_auto_load_footer) .onRefresh(this) .onLoadMore(this) //需要添加加载失败后,点击重试的实现 .onLoadRetry(this) //开启自动加载模式 .autoLoadMore(true) .build(); ``` 一般我们需要定制化加载布局的样式,布局需要实现`OnLoadStateChangeListener`接口来保证当前能显示正确的状态。可参考`AutoLoadMoreFooter`的实现。 ### 高级特性 #### 自定义下拉刷新头部视图 需要实现`SwipeTrigger`和`SwipeRefreshTrigger`接口。 下面以实现自定义刷新头部的例子说明: 头部布局xml文件:`load_refresh` ```java ``` 自定义头部代码:`RefreshHeader` ```java public class RefreshHeader extends LinearLayout implements SwipeTrigger, SwipeRefreshTrigger { private ImageView headerProgress; private TextView headerText; private AnimationDrawable refreshAnim; public RefreshHeader(Context context) { this(context, null); } public RefreshHeader(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public RefreshHeader(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { super.onFinishInflate(); headerProgress = (ImageView) this.findViewById(R.id.headerProgressBar); headerText = (TextView) this.findViewById(R.id.headerText); refreshAnim = (AnimationDrawable) headerProgress.getDrawable(); } //拖动的开始,可以做一些初始化工作 @Override public void onPrepare() { headerText.setText("下拉刷新..."); } //拖动过程中 @Override public void onMove(int y, boolean isComplete, boolean automatic) { if (y >= getHeight() && !isComplete) { headerText.setText("松开刷新..."); } } //松开时回调 @Override public void onRelease() { } //刷新完成 @Override public void onComplete() { headerProgress.setVisibility(GONE); refreshAnim.stop(); headerText.setText("更新完成"); } @Override public void onReset() { headerText.setText("下拉刷新..."); } //处理刷新中状态 @Override public void onRefresh() { headerProgress.setVisibility(VISIBLE); refreshAnim.start(); headerText.setText("更新中..."); } } ``` #### 自定义上拉加载底部视图 同上,需要实现`SwipeTrigger`和`SwipeLoadMoreTrigger`接口即可。