功能點:無限輪播、指示點跟隨、點擊響應。實現思路: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>