/AutoViewPager

ViewPager+Handler实现的自动无限轮播控件

Primary LanguageJava

简介


本项目是一个简单的轮播图实现库,采用ViewPager+Handler实现,基本功能包括:

  1. 无限循环切换界面
  2. 自动无限循环切换

用法


  1. 编译library库,然后将library-release.aar文件复制到lib文件夹,接着在模块的build.gradle下添加:
compile(name: 'library-release', ext: 'aar')

在项目的build.gradle下添加:

allprojects {
    repositories {
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}
  1. 新建一个Activity,在布局中添加AutoViewPager

    <com.art.zok.autoview.AutoViewPager
        android:id="@+id/auto_view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:indicatorWidth="5dp"
        app:indicatorHeight="5dp"
        app:indicatorPadding="2dp"
        app:intervalTime="2000"
        app:selectedDrawable="@mipmap/indicator_normal"
        app:unselectedDrawable="@mipmap/indicator_selected"/>

    本库为用户提供六个自定义属性,分别是:

    • indicatorWidth:指示器宽度,默认为8dp。
    • indicatorHeight:指示器高度,默认为8dp。
    • indicatorPadding:指示器之间的间距,默认为指示器宽度的一半。
    • intervalTime:自动播放时,页面之间的间隔时间,默认为2000毫秒。
    • selectedDrawable:选中的指示器的Drawable,默认为白填充效果。
    • unselectedDrawable:未选中的指示器的Drawable,默认为灰色填充效果。
  2. Activity设置适配器:

      public class MainActivity extends AppCompatActivity {
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              ...
              AutoViewPager autoViewPager = (AutoViewPager) findViewById(R.id.auto_view_pager);
    
              autoViewPager.setPagerAdapter(new PagerAdapter() {
                  @Override
                  public int getCount() {
                      return 10;
                  }
    
                  @Override
                  public boolean isViewFromObject(View view, Object object) {
                      return view == object;
                  }
    
                  @Override
                  public Object instantiateItem(ViewGroup container, int position) {
                      TextView view = (TextView) getLayoutInflater().inflate(R.layout.pager_item, container, false);
                      view.setText("Pager " + position);
                      container.addView(view);
                      return view;
                  }
    
                  @Override
                  public void destroyItem(ViewGroup container, int position, Object object) {
                      container.removeView((View) object);
                  }
              });
          }
      }

    可以看到和原始的ViewPager使用上没有任何区别。到现在就已经实现无限循环切换,如果希望启动自动轮播,可以随时调用下面方法开始:

    autoViewPager.start();

    autoViewPager也可以像原始的ViewPager那样设置触摸事件监听和页面切换事件监听:

     autoViewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
               ...
                return false;
            }
        });
    
     autoViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                Log.d("tag", "onPageScrolled");
            }
            ...
        });

效果


  1. 不开启自动轮播效果:

  1. 开启自动轮播效果: