ViewPager添加圆点indicator,及ViewPager的循环滚动、自动滚动

ViewPager是Android开发中常用控件之一,在应用的引导页,banner图片滚动时候常用ViewPager实现

由于公司项目上经常用到,每次单独开发成本较高,因此我开发了一个自定义控件来实现这种效果,降低复用成本。


github地址:https://github.com/daydreary/DotViewPager


1、简介:

     实现功能:为ViewPager添加圆点指示器、ViewPager自动滚动、ViewPager循环滚动。

     示例效果图:

     


2、如何使用:

    1、将library项目添加到工程中

    2、在xml中引入DotViewPager

<com.cx.dotviewpager.view.DotViewPager 
      android:id="@+id/dot"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:dvpViewPager="@+id/vPager">
      <android.support.v4.view.ViewPager
          android:id="@+id/vPager"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>
</com.cx.dotviewpager.view.DotViewPager >

          将其包裹在ViewPager外,并设置自定义属性 dvpViewPager="@+id/你的viewpager ID"


    3、在代码中使用

dot = (DotViewPager) findViewById(R.id.dot);
dot.setAdapter(yourPagerAdapter);

     4、如何使用循环滚动功能:

           首先需要修改你的数据源,添加header和footer

           如果你想显示3张图片 img0 img1 img2

           需要在img0前面添加img2,并在img2后添加img0

           所以最后的List(或其他数据源)中应当有5个图片  img2 img0 img1 img2 img0

           额外添加的img0和img2作为循环过渡页,并不会产生视觉上的问题。

           示例代码:

           

private void init() {
      //初始化数组
      list = new ArrayList<View>();

      //将最后一张图片作为header添加
      ImageView img0 = new ImageView(getActivity());
      img0.setTag(3);
      img0.setOnClickListener(this);
      img0.setImageResource(R.drawable.image4);
      list.add(img0);

      //添加需要的图片
      for (int i = 0; i < 4; i++) {
          ImageView img = new ImageView(getActivity());
          img.setTag(i);
          img.setOnClickListener(this);
          switch (i) {
          case 0:
              img.setImageResource(R.drawable.image1);break;
          case 1:
              img.setImageResource(R.drawable.image2);break;
          case 2:
              img.setImageResource(R.drawable.image3);break;
          case 3:
              img.setImageResource(R.drawable.image4);break;
          }
          list.add(img);
      }

      //将第一张图片作为footer添加
      ImageView imgl = new ImageView(getActivity());
      imgl.setTag(0);
      imgl.setOnClickListener(this);
      imgl.setImageResource(R.drawable.image1);
      list.add(imgl);
      adapter = new MyPagerAdapter(list);
      //调用setAdapterWithLoop方法表示开启循环
      dot.setAdapterWithLoop(adapter);
      //调用setAutoScroll方法开始自动滚动(如果调用了此方法,要在onDestroy中调用<span style="font-family: Arial, Helvetica, sans-serif;">setAutoScroll(false, 0, null)以确保停止滚动减少资源消耗</span>)
      dot.setAutoScroll(true, 500, null);
  }

    5、更多方法可选介绍

    (1) 如果你需要给ViewPager添加onTouchListener与onPageChangeListener,调用DotViewPager中的同名方法,而不是直接给ViewPager设置

    (2) setGravity方法可以改变indicator的位置,目前支持7个位置。左上、中上、右上、正中、左下、中下、右下位置。如:setGravity(DotViewPager.BOTTOM_CENTER)

    (3) setMarginDip与setMarginPixel方法可以调整indicator与页面的边距,可以对位置做细微调整

    (4) setAutoScroll方法,可以开始或停止ViewPager的自动滚动

          此方法第二个参数表示翻页动画执行时间,以毫秒计算

          此方法第三个参数表示动画interpolator,默认为AccelerateDecelerateInterpolator,你可以自己定义翻页动画的interpolator

    (5) setScrollDuration方法可以改变翻页动画执行时间,等效于setAutoScroll中的第二个参数

    (6) setDelay方法,设置翻页的间隔时间


    如果你需要改变圆点的样式,可以直接替换res/drawable-hdpi中的ic_dot_normal.png与ic_dot_selected.png

    此控件本身为FrameLayout子类,而不是一个ViewPager。如果你需要添加其他效果,可以将其视为容器,直接在其内部添加子View

    library中提供了WrapContentViewPager,可以解决ViewPager高度wrap_content无效的问题。如果不需要使用,可以删除。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值