FreeSwipeRefreshLayout
Introduction: 基于 SwipeRefreshLayout 的自由定义刷新动画的下拉刷新工具
Tags:
下拉刷新-自定义-SwipeRefreshLayout-基于 SwipeRefreshLayout 的自由定义刷新动画的下拉刷新工具
效果:
引入:
在 build.gradle 中加入
compile 'com.nelson:FreeSwipeRefreshLayout:0.1.0'
用法:
1.首先,在 xml 中像使用 SwipeRefreshLayout 一样,将布局套在需要刷新的控件上。注意:这里需要给它的 app:freeLayout 属性赋值,值为你要用来替换的下拉动画的布局文件。
<com.nelson.libraries.FreeSwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:freeLayout="@layout/item_main_free"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</com.nelson.libraries.FreeSwipeRefreshLayout>
2.在 java 中实现动画 manager 接口
FreeSwipeAnimationManager manager = new FreeSwipeAnimationManager() {
@Override
public void onPull(View freeView, float position) {
//这里是拖拽过程中的回调,position 为拖拽进度,可以大于 1
freeView.setPivotX(freeView.findViewById(R.id.tv).getRight()-freeView.findViewById(R.id.tv).getWidth()/2);
freeView.setPivotY(freeView.findViewById(R.id.tv).getBottom()-freeView.findViewById(R.id.tv).getHeight()/2);
freeView.setRotation(360*position);
}
@Override
public void onRefresh(final View freeView) {
//这里是拖拽完成且达到刷新点的回调,表示正在刷新中
freeView.setRotation(0);
}
@Override
public void onBack(View freeView, float position) {
//这里是回复到初始状态的过程中回调,position 依然为进度值
freeView.setRotation(360*position);
}
}
3.给 FreeSwipeRefreshLayout 设置 Manager
refresh.setFreeSwipeAnimationManager(manager);
4.手动停止刷新
//只需要调用这个方法即可
setRefreshing(false);
5.其它
保留了部分原 SwipeRefreshLayout 中的 public 方法,可以自行查看,比如 public boolean isRefreshing();