转载请标明出处:http://blog.csdn.net/u013254166/article/details/79026116
本文出自: 【rhino博客】
分享一个控件,可用于ViewPager页面指示器,使用起来非常简单方便。支持横向、纵向两种布局,可以xml设置也可以动态设置。支持三种模式Mode:
INSIDE: 滚动的小圆点被遮住,在整个圆点视图的背后滚动。
OUTSIDE: 滚动的小圆点在整个圆点视图的上面滚动。
SOLO: 没有滚动动画效果,直接选中。
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
mCircleIndicator1.setPosition(position, positionOffset);
mCircleIndicator2.setPosition(position, positionOffset);
mCircleIndicator3.setPosition(position, positionOffset);
}
@Override
public void onPageSelected(int position) {
mCircleIndicator4.setPosition(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Demo采用ViewPager演示,也适用于RecyclerView,移植性强,拷贝到工程里面就能用。只需要在对应的回调接口CircleIndicator的setPosition方法即可。
注意这里有两个setPosition方法:
/**
* This method will be invoked when the dest page is selected.
*
* @param position The position of current page selected.
*/
public void setPosition(int position)
这个接口调用后立即选中,并刷新视图。
/**
* This method will be invoked when the current page is scrolled, either as part
* of a programmatically initiated smooth scroll or a user initiated touch scroll.
*
* @param position The position of next page that will be show.
* @param positionOffset Value from [0, 1) indicating the offset from the page at position.
* @see Mode#INSIDE
* @see Mode#OUTSIDE
*/
public void setPosition(int position, float positionOffset)
这个接口用于显示动画效果,前提是Mode必须为INSIDE或OUTSIDE,这里的参数直接仿造ViewPager.OnPageChangeListener.onPageScrolled方法:
position: 接下来将选中的页面索引。
positionOffset: 滚动到下一个页面的百分比,取值为[0, 1)。如果页面向前滑动positionOffset 从1.0减至0,如果页面向后滑动positionOffset 从0加至1.0。