本文介绍PullZoomView的简单实现,如图:
就是通过下拉ListView或者ScrollView或者更多的View如GridView,RecycleView等等,的时候对Header有一个放大缩小的效果
实现思路就是根据所需要封装的不同的下拉控件来做不同的实现,比如:
ListView:该控件本身有添加Header的功能,我们只需做简单的处理就可以用了,在满足一定条件时做事件拦截,让整个控件向下滚动的时候回传一个value用来改变Header的高度。
ScrollView:这就需要我们自己封装一个Header在ScrollView的孩子控件当中。滚动的时候和ListView做相同的操作即可。
IPullZoom 定义公共接口
PullZoomBase 抽象公共的方法
PullZoomListView ListView的实现
PullZoomScrollView ScrollView的实现
IPullZoom.java
public interface IPullZoom {
void initHeader(TypedArray a);
}
PullZoomBase.java
public abstract class PullZoomBase<T extends View> extends LinearLayout implements IPullZoom {
/**
* 根布局,用来装所有内容
*/
protected T mRootView;
/**
* 定义的显示伸缩效果的View
*/
protected View mZoomView;
/**
* 伸缩效果上展示的内容
*/
protected View mHeadView;
/**
* 是否允许下拉
*/
private boolean isPullEnable = true;
private boolean isZooming;
private boolean isHeadHide;
private boolean isDragging;
private float mLastX;
private float mLastY;
private float mInitX;
private float mInitY;
private int mTouchSlop;
public PullZoomBase(Context context) {
this(context