轉載請標明出處: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。