这是一个安卓客户端实用的轮播图控件,废话不多说,先上Demo效果图
使用时在布局文件中设计好你想要的轮播图效果,如下
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="160dp">
<cn.hufeifei.carousel.Carousel
android:id="@+id/carousel"
android:layout_width="match_parent"
android:layout_height="160dp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#9000">
<cn.hufeifei.carousel.indicator.TitleIndicator
android:id="@+id/pagerTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:padding="10dp"
android:textColor="#fff"
tools:ignore="RtlHardcoded" />
<cn.hufeifei.carousel.indicator.ShapeIndicator
android:id="@+id/shapeIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
app:item_gap="10dp"
app:item_height="10dp"
app:item_width="10dp"
tools:ignore="RtlHardcoded" />
</RelativeLayout>
</RelativeLayout>
其中有Carousel、TitleIndicator、ShapeIndicator、DigitalIndicator四个自定义类 1、Carousel是无限循环播放图片的,它继承自ViewPager,完全可以把它当成ViewPager使用(比如设置PagerAdapter,添加页面滑动监听),它的自定义属性如下:
属性 | 含义 | 类型 | 默认值 |
---|---|---|---|
scroll_delay | 滑动间隔时间 | integer | 3000ms |
scroll_duration | 滑动时长 | integer | 600ms |
scroll_direction | 滑动方向 | enum(left|right) | left |
auto_scroll | 是否自动滑动 | boolean | true |
2、ShapeIndicator是形状指示器,默认指示器形状为圆形(如Demo中的第一个轮播图) 你还可以selected_drawable与unselected_drawable两个属性来自定义它的形状以及颜色(如Demo中的第三个轮播图),它的自定义属性如下表:
属性 | 含义 | 类型 | 默认值 |
---|---|---|---|
item_width | 每个指示器的宽度 | dimension | 0(所以必须设置该属性) |
item_height | 每个指示器的高度 | dimension | 0(所以必须设置该属性) |
item_gap | 指示器之间的间隔 (如果为垂直方向则为垂直间隔) | dimension | 默认与item_width相等 |
item_clickable | 指示器是否能相应点击事件 | boolean | true(所以默认点击指示器也能切换页面) |
selected_drawable | 指示器被选中时的drawable | drawable | 默认为圆形浅红色(详见Demo演示图) |
unselected_drawable | 指示器未被选中时的drawable | drawable | 默认为圆形暗灰色 |
3、TitleIndicator是用来显示页面标题的,它通过调用PagerAdapter的getPageTitle方法来获取标题内容的,所以如果你想设置表示那你需要重载getPageTitle方法。另外由于TitleIndicator继承自TextView,所以使用方式与TextView完全相同,你可以为它设置背景,颜色等各种样式(它没有自定义属性)。
4、DigitalIndicator是以数字的方式显示当前页面所在的位置的,它也是直接继承自TextView,与ViewPager关联后会自动根据ViewPager所在的位置修改文本内容(Demo中第二个轮播图就是用了该指示器)
在以上的Indicator指示器中都有一个void attachViewPager(@Nullable ViewPager viewPager) 方法可以将指示器与ViewPager关联,由于Carousel直接继承自ViewPager,所以你也可以使用该方法关联Carousel,如果传入参数为null,解除该指示器与原来的ViewPager的关联 具体关联ViewPager的Java代码如下 :
carousel.setAdapter(new PagerAdapter());
pagerTitle.attachViewPager(carousel);
shapeIndicator.attachViewPager(carousel);//调用该方法关联ViewPager对象
如果你想设置更炫的动画切换效果你可以参考** ViewPagerTransforms项目 **,使用方式非常简单:
//先添加该库的Gradle依赖
compile 'com.ToxicBakery.viewpager.transforms:view-pager-transforms:1.2.32@aar'
//通过setPageTransformer方法即可设置切换动画
pager = (ViewPager) findViewById(R.id.container);
pager.setAdapter(mAdapter);
pager.setPageTransformer(true, new RotateUpTransformer());