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无效的问题。如果不需要使用,可以删除。