功能点:无限轮播、指示点跟随、点击响应。实现思路:android
一、指示点跟随,指示点经过代码动态添加,数量由图片数量决定。网络
在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,setEnable(true),非当前页设置为false。因为图片是从网络获取,数量不定,因此此处不能使用switch写死,须要设置变量记录当前和前一个。代码以下:ide
llAddPoint为添加指示点的线性布局布局
prePosition为前一个位置,初始化时设为0,newPosition为当前位置 this
int newPosition =position%imageViews.size();//使用最大值来进行无限轮播,因此须要取模。
llAddPoint.getChildAt(newPosition).setEnabled(true);
llAddPoint.getChildAt(prePosition).setEnabled(false);
prePosition=newPosition;spa
二、在activity的ondestroy方法中关闭轮播图
xml
三、点击响应在viewpager的适配器中instantiateItem方法里设置,由于图片为网络获取,因此不能以设置id的方式设置点击事件代码:事件
@Override
public Object instantiateItem(ViewGroup container, final int position) {
ImageView iv = imageViews.get(position % imageViews.size());
container.addView(iv);
// 在这个方法里面设置图片的点击事件
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 处理跳转逻辑
Toast.makeText(carouselActivity.this,"被点了"+position%imageViews.size(),Toast.LENGTH_SHORT).show();
}
});
return iv;
}图片
四、指示点使用shape画出 下面是大小5dp ,实心的灰色圆点。get
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<solid android:color="@android:color/darker_gray"/>
<size android:height="5dp" android:width="5dp"/>
</shape>