UltraViewPager是一个聚合多种特性的ViewPager,主要目的是给一些频繁出现的场景提供一个高效统一的解决方案。
UltraViewPager的特性包括:
以上特性支持同时使用;
/**
* 设置滚动模式,包括水平滚动和竖直滚动
*
* @param scrollMode
*/
void setScrollMode(UltraViewPager.ScrollMode scrollMode);
scrollMode的值是 UltraViewPager.ScrollMode.HORIZONTAL 或 UltraViewPager.ScrollMode.VERTICAL,默认横向滑动;
/**
* 设置内部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;
/**
* 设置无限循环
*
* @param enable 是否开启
*/
void setInfiniteLoop(boolean enable);
没什么好说明的,看接口文档应该不难理解;
/**
* 以特定的间隔时间开始自动翻页
*
* @param intervalInMillis page的自动翻页间隔时间
*/
void setAutoScroll(int intervalInMillis);
/**
* 停止自动翻页
*/
void disableAutoScroll();
注意setAutoScroll的参数单位是 毫秒;
/**
* 设置ViewPager的最大宽度
*
* @param width 宽度
*/
void setMaxWidth(int width);
/**
* 设置ViewPager的最大高度
*
* @param height 高度
*/
void setMaxHeight(int height);
/**
* 以设定的 宽/高 比例来绘制UltraViewPager
*
* @param ratio
*/
void setRatio(float ratio);
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();
竖向滑动暂不支持设置PageTransformer,待后续解决;以下是几个demo:
因需要把indicator内置,所以UltraViewPager的实现方式比较特殊,是继承自RelativeLayout,然后将ViewPager和indicator置于其中,同时UltraViewPager提供了一些ViewPager常用方法的代理,这样在日常使用上保持和ViewPager无差异,如果需要调用ViewPager的所有方法,可通过getViewPager()方法拿到真正的ViewPager进行操作.
竖向滑动是通过在ViewPager的onInterceptTouchEvent和onTouchEvent中交换横竖向的eventLocation,同时设置特殊PageTransformer实现,详见源码.