輪播功能在APP中是比較常見的,網(wǎng)上也有很多第三方的自動輪播庫撞羽,做的很不錯(cuò)阐斜,這里自己手寫一版簡單的ViewPager+Handler機(jī)制的自動無限輪播,小白可以直接上手的诀紊。
先上簡單的核心代碼,代碼中有詳細(xì)的注釋谒出。
private void initView() {
auto_viewpager = (ViewPager) findViewById(R.id.vp_shuffling);
tv_content = (TextView) findViewById(R.id.tv_content);
dotLayout = (LinearLayout) findViewById(R.id.layout_point);
mADParseArray = new ArrayList<String>();
mADParseArray
.add("http://m.easyto.com/m/zhulifuwu_banner.jpg");
mADParseArray
.add("http://m.easyto.com/m/japan/images/banner_3y_new.jpg");
mADParseArray
.add("http://m.easyto.com/m/japan/images/banner_5y_new.jpg");
final int size = mADParseArray.size();
content = new String[]{"輪播圖介紹一", "輪播圖介紹二", "輪播圖介紹三"};
auto_viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
/**
* @param position:跳轉(zhuǎn)完畢的頁碼角標(biāo),這個(gè)方法做自動輪播
*/
@Override
public void onPageSelected(int position) {
Log.e(TAG, "onPageSelected");
refreshPoint(position % size);
if (mHandler.hasMessages(HOME_AD_RESULT)) {
mHandler.removeMessages(HOME_AD_RESULT);
}
mHandler.sendEmptyMessageDelayed(HOME_AD_RESULT, 3000);
}
/**
* @param arg0:滑動時(shí)代表當(dāng)前頁角標(biāo)邻奠,滑動結(jié)束時(shí)代表滑動停止時(shí)的頁碼角標(biāo)
* @param arg1:0-1或者1-0變化
* @param arg2:0 <-> 屏幕的寬度值變化
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
Log.e(TAG, "onPageScrolled");
}
/**
* @param arg0:0 沒滑動 1:正在滑動 2:滑動完畢
*/
@Override
public void onPageScrollStateChanged(int arg0) {
Log.e(TAG, "onPageScrollStateChanged = " + arg0);
if (ViewPager.SCROLL_STATE_DRAGGING == arg0
&& mHandler.hasMessages(HOME_AD_RESULT)) {
mHandler.removeMessages(HOME_AD_RESULT);
}
}
});
//
BannerAdapter adapter = new BannerAdapter(mContext, mADParseArray);
auto_viewpager.setAdapter(adapter);
initPointsLayout(size);
auto_viewpager.setCurrentItem(size * 1000, false);//設(shè)置當(dāng)前position笤喳,不設(shè)置開始無法右滑
// 利用handler啟動自動輪播
mHandler.sendEmptyMessageDelayed(HOME_AD_RESULT, 3000);
}
handler中
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
// 廣告
case HOME_AD_RESULT:
auto_viewpager.setCurrentItem(auto_viewpager.getCurrentItem() + 1,
true);//設(shè)置播放下一頁
break;
}
}
};