源碼鏈接
效果圖

自動手動輪播圖
具體功能:
1.自動輪播
2.手動輪播
3.監(jiān)聽點擊事件跳轉(zhuǎn)界面
4.每個圖片可加標(biāo)題(我的圖片顏色太鮮艷了,就沒有讓文字顯示)
實現(xiàn)步驟:
1.創(chuàng)建顯示圖片和文字描述的carousel_item.xml文件

carousel_item.xml
2.創(chuàng)建對應(yīng)的是實體類ImageTitleBean,定義imageId和title屬性

ImageTitleBean
3.使用幀布局顯示ViewPager和指示器的界面,圖片到第幾頁時指示器跟著改變,carousel.xml文件

carousel.xml
4.創(chuàng)建java類繼承自FrameLayout,動態(tài)地為上一步創(chuàng)建的界面添加數(shù)據(jù)以及設(shè)置顯示方式
4.1加載視圖carousel.xml,綁定ViewPager和放指示器的線性布局

4.2為適配器設(shè)置集合數(shù)據(jù),當(dāng)i=0時使用Glide框架加載最后一張圖片,標(biāo)題顯示最后一個標(biāo)題,當(dāng)i=最后一頁時,圖片加載第一張,標(biāo)題也同樣處理,其他的都按照加載第i-1張圖片處理

4.3創(chuàng)建適配器繼承自PagerAdapter,在instantiateItem方法中設(shè)置監(jiān)聽

接口回調(diào)步驟:

4.3.1創(chuàng)建接口OnItemClickListener,聲明方法onItemClick()
4.3.2聲明私有的監(jiān)聽器
4.3.3提供設(shè)置監(jiān)聽器的公共方法
4.3.4在點擊處實現(xiàn)onItemClick()方法
4.3為ViewPager設(shè)置適配器,從當(dāng)前從1開始,為ViewPager設(shè)置頁面監(jiān)聽,當(dāng)頁面被選中時,指示器會放大;

如果界面滾動了,獲取當(dāng)前的item,如果item==0,就設(shè)置為最后一個,如果,item==count+1,就設(shè)置為第一個,這樣可以實現(xiàn)第一個圖片和最后一個圖片切換時不會出現(xiàn)閃現(xiàn)或卡頓的畫面
5.設(shè)置指示器,創(chuàng)建和圖片數(shù)量同樣多的視圖,布置間距,大小和背景資源,將它們添加進入LinearLayout,默認(rèn)第一個未選中,其他未選中。

這里用到了SparseBooleanArray,它是用來存儲布爾值的,類似于key,value,根據(jù)其中存放的值來判斷是否被選中
6.使用多線程控制圖片每3秒換一次,handler發(fā)送消息,Runnable執(zhí)行任務(wù)設(shè)置CurrentItem值變化

7.在MainActivity中設(shè)置數(shù)據(jù)源

8.實現(xiàn)輪播圖的監(jiān)聽方法
