回顾
上一篇,我们讲到了Ultra-Pull-To-Refresh的基本用法。分成四步:
思路
目的: 做一个我们自己的自定义刷新的动画(我们先不管动画是什么,不同的需求,动画都不一样)
我们前面讲到的主要类无非就是两个: PtrFrameLayout,Header(Footer),前者是刷新控件,监听刷新过程,后者是头布局(脚布局),以添加头布局为例:我们这里首先就会想到重写这个布局。辣么?怎么重写这个头布局呢?我们先来看看怎么添加这个头布局的:
1 | public void setHeaderView(View header) { |
它这里实际上就是添加了一个View,所以,我们随便写一个自定义View,继承View就可以传进来
我们,再来看看另一个方法,就是监听的方法,这里好像也是传的View对象,因为,我们前面写的时候就是传的header:
1 | public void addPtrUIHandler(PtrUIHandler ptrUIHandler) { |
咦,不对啊,这里不是应该传的View对象么?怎么是PtrUIHandler类型的。其实,你看名字就应该看的出来,他这里传的是一个PtrUIHandler对象,点进去看,他就是一个接口。里面是下拉刷新的回调。讲到这里,我们就应该明了了,就是一个自定义View,继承View,实现PtrUIHandler接口。辣么,就开始撸了。
1 | /** |
可以看到,我这里面什么都没有,就是继承了FrameLayout布局,实现了PtrUIHandler接口,然后在构造方法里面加载了一个布局,添加进来,布局也很简单,里面就只有一个ImageView。布局如下:
1 | <?xml version="1.0" encoding="utf-8"?> |
再就是调用了,跟上一篇的调用方式一样。
1 | final PtrFrameLayout ptrFrameLayout = findViewById(R.id.ptr_frame_layout); |
然后运行,你就会看到,刷新的header就是你的自定义view。到此,自定义刷新布局就完成了,脚布局方式类似。
什么鬼?这就没了?刷新布局就一个ImageView就没了?这么敷衍。好歹你也加个动画啊。可以可以,那就加个动画。
如你所愿,我加了一个帧动画。
1 | <?xml version="1.0" encoding="utf-8"?> |
header里面的改动:
1 | private void initView() { |
在初始化的时候,把动画获取到,然后在刷新的时候开始动画,在刷新完成的时候停止动画。