lightSky / InfiniteIndicator

This lib can be used for viewpager infinite loop with indicator easily.
486 stars 102 forks source link

InfiniteIndicator

This project is inspired by the android-auto-scroll-view-pager of Trinea. Use the salvage lib implement view recycle adapter.It contains two style.One is CircleIndicator seperated from Android-ViewPagerIndicator.Another is copy from CircleIndicator.You can custome style and animation.

Screenshot

Screenshot

Demo Download

APK Donwload

Setting

You can config all feature in the IndicatorConfiguration class.It adopt builder design pattern.

indicator_type
the style of Indicator,you can set indicator_type attribute in the xml layout to change the indicator style.

Including In Your Project

compile 'cn.lightsky.infiniteindicator:library:1.2.2'

Usage

   <cn.lightsky.infiniteindicator.InfiniteIndicatorLayout
        android:id="@+id/indicator_default_circle"
        app:indicator_type="indicator_anim_circle"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"/>
class AnimIndicatorActivity extends FragmentActivity implements ViewPager.OnPageChangeListener,OnPageClickListener {
    private ArrayList<Page> pageViews;
    private InfiniteIndicator mAnimCircleIndicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anim_indicator);

        initData();
        mAnimCircleIndicator = (InfiniteIndicator) findViewById(R.id.infinite_anim_circle);
        IndicatorConfiguration configuration = new IndicatorConfiguration.Builder()
                .imageLoader(new UILoader())
                .isStopWhileTouch(true)
                .onPageChangeListener(this)
                .onPageClickListener(this)
                .direction(LEFT)
                .position(IndicatorConfiguration.IndicatorPosition.Center)
                .build();
        mAnimCircleIndicator.init(configuration);
        mAnimCircleIndicator.notifyDataChange(pageViews);

    }

    private void initData() {
        pageViews = new ArrayList<>();
        pageViews.add(new Page("A", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/a.jpg",this));
        pageViews.add(new Page("B", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/b.jpg",this));
        pageViews.add(new Page("C", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/c.jpg",this));
        pageViews.add(new Page("D", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/d.jpg",this));

    }

    //To avoid memory leak ,you should release the res
    @Override
    protected void onPause() {
        super.onPause();
        mAnimCircleIndicator.stop();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mAnimCircleIndicator.start();
    }

    @Override
    public void onPageSelected(int position) {
        //do something
    }

    @Override
    public void onPageClick(int position, Page page) {
        //do something
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }   
}

Thanks
android-auto-scroll-view-pager
AndroidImageSlider
CircleIndicator
Android-ViewPagerIndicator

About me
Weibo: light_sky
Blog: lightskystreet.com     light_sky
Email: lightsky.cn@gmail.com