Google官方提供的ViewPager只能左右滑动,据说这个控件正在开发中,但是有时候我们也需要一种垂直滑动的页面。前几天我再github上下载了一个垂直Viewpager的源码,是一个国外大神写的,很遗憾的是我并没有看懂,或者说我没有耐下心来看。那个大神是重写的ViewPager类,而我这次通过重写ViewGroup也近似实现了垂直滑动的效果,但是功能并没有国外那个那么强大。
思路很简单,就是重写ViewGroup,既然是滑动页,那就在触摸事件中做文章,判断手指滑动的距离,然后根据滑动意向去设置滑动偏移量,所以有了思路,就用实际代码实现。
public class VerticalViewpager extends ViewGroup {
int mScreenHeight;
int mLastY;
int mStart;
int mEnd;
Scroller mScroller;//滚动类
private boolean isScrolling = false;
private VelocityTracker mTracker;//加速度,用于判断是否用户希望滑动到下一页。
//可以这么理解,有时候我们滑的很慢,这需要判断滑动超过一定距离后才滑到下一页,但是有时候不需要超过一定距离,我希望滑到下一页,滑动的很快
public VerticalViewpager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
WindowManager manager = (WindowManager) context.getSystemService(Act