UltraViewPager


简介

UltraViewPager是一个聚合多种特性的ViewPager,主要目的是给一些频繁出现的场景提供一个高效统一的解决方案。
UltraViewPager的特性包括:

以上特性支持同时使用;


使用方法

1.设置横/竖向滑动
    /**
     * 设置滚动模式,包括水平滚动和竖直滚动
     *
     * @param scrollMode 
     */
    void setScrollMode(UltraViewPager.ScrollMode scrollMode);

scrollMode的值是 UltraViewPager.ScrollMode.HORIZONTAL 或 UltraViewPager.ScrollMode.VERTICAL,默认横向滑动;

2. 一屏内显示多页
    /**
     * 设置内部child的resId,用于获取child的大小,设置后会启用MultiScreen特性
     *
     * @param matchChildWithResId the child id
     */
    void setChildResId(int matchChildWithResId);

一屏内显示多页的一个条件是page中需要显示的view不是满屏,且有固定的宽高,使用时需用一个layout包裹需要显示的view,建议使用RelativeLayout嵌套view,然后把view设置center,setChildResId方法中的id是这里view的id;

3. 循环滚动
    /**
     * 设置无限循环
     *
     * @param enable 是否开启
     */
    void setInfiniteLoop(boolean enable);

没什么好说明的,看接口文档应该不难理解;

4. 定时滚动
    /**
     * 以特定的间隔时间开始自动翻页
     *
     * @param intervalInMillis page的自动翻页间隔时间
     */
    void setAutoScroll(int intervalInMillis);

    /**
     * 停止自动翻页
     */
    void disableAutoScroll();

注意setAutoScroll的参数单位是 毫秒;

5. 设置UltraViewPager的最大宽高
    /**
     * 设置ViewPager的最大宽度
     *
     * @param width 宽度
     */
    void setMaxWidth(int width);

    /**
     * 设置ViewPager的最大高度
     *
     * @param height 高度
     */
    void setMaxHeight(int height);
6. 设置比例
    /**
     * 以设定的 宽/高 比例来绘制UltraViewPager
     *
     * @param ratio
     */
    void setRatio(float ratio);
7. Indicator

UltraViewPager的indicator支持两种样式,圆点和Icon:


indicator同样支持横向和竖向两种方式:

initIndicator的调用会返回IUltraIndicatorBuilder,故indicator支持链式调用,不过需要注意的是调用完initIndicator之后需要调用build()完成indicator的建立;

/**
 * 初始化indicator,支持链式set属性,focusColor, normalColor是必设属性,否则indicator不会显示
 *
 * @return
 */
IUltraIndicatorBuilder initIndicator();

/**
 * 使用一些基础值创建indicator, 需自己调用build完成创建
 *
 * @param focusColor    indicator被选中的颜色
 * @param normalColor   indicator未被选中的颜色
 * @param radiusInPixel indicator的半径
 * @param gravity       indicator的布局位置,使用android.view.Gravity,支持组合使用,如:Gravity.BOTTOM | Gravity.RIGHT
 */
IUltraIndicatorBuilder initIndicator(int focusColor, int normalColor, int radiusInPixel, int gravity);

/**
 * 使用一些基础值创建indicator, 需自己调用build完成创建
 *
 * @param focusColor    indicator被选中的颜色
 * @param normalColor   indicator未被选中的颜色
 * @param strokeColor   边框颜色
 * @param strokeWidth   边框大小
 * @param radiusInPixel indicator的半径
 * @param gravity       indicator的布局位置,使用android.view.Gravity,支持组合使用,如:Gravity.BOTTOM | Gravity.RIGHT
 */
IUltraIndicatorBuilder initIndicator(int focusColor, int normalColor, int strokeColor, int strokeWidth, int radiusInPixel, int gravity);

/**
 * 使用一些基础值创建indicator, 需自己调用build完成创建
 *
 * @param focusResId  indicator被选中的图片资源id
 * @param normalResId indicator未被选中的图片资源id
 * @param gravity     indicator的布局位置,使用android.view.Gravity,支持组合使用,如:Gravity.BOTTOM | Gravity.RIGHT
 */
IUltraIndicatorBuilder initIndicator(int focusResId, int normalResId, int gravity);

/**
 * 移除indicator
 */
void disableIndicator();

以下是IUltraIndicatorBuilder的相关接口方法:

IUltraIndicatorBuilder setFocusColor(int focusColor);

IUltraIndicatorBuilder setNormalColor(int normalColor);

IUltraIndicatorBuilder setStrokeColor(int strokeColor);

IUltraIndicatorBuilder setStrokeWidth(int strokeWidth);

/**
 * indicator的item之间的间距,默认是item的宽度
 * @param indicatorPadding
 * @return
 */
IUltraIndicatorBuilder setIndicatorPadding(int indicatorPadding);

IUltraIndicatorBuilder setRadius(int radius);

IUltraIndicatorBuilder setOrientation(UltraViewPager.Orientation orientation);

/**
 * 使用android.view.Gravity,支持组合使用,如:Gravity.BOTTOM | Gravity.RIGHT
 *
 * @param gravity android.view.Gravity
 * @return
 */
IUltraIndicatorBuilder setGravity(int gravity);

IUltraIndicatorBuilder setFocusResId(int focusResId);

IUltraIndicatorBuilder setNormalResId(int normalResId);

IUltraIndicatorBuilder setMargin(int left, int top, int right, int bottom);

void build();
8. PageTransformer

竖向滑动暂不支持设置PageTransformer,待后续解决;以下是几个demo:


组件设计说明

因需要把indicator内置,所以UltraViewPager的实现方式比较特殊,是继承自RelativeLayout,然后将ViewPager和indicator置于其中,同时UltraViewPager提供了一些ViewPager常用方法的代理,这样在日常使用上保持和ViewPager无差异,如果需要调用ViewPager的所有方法,可通过getViewPager()方法拿到真正的ViewPager进行操作.

竖向滑动是通过在ViewPager的onInterceptTouchEvent和onTouchEvent中交换横竖向的eventLocation,同时设置特殊PageTransformer实现,详见源码.