三行代碼實現一個輪播 BannerView
自己簡單封裝了一個帶hint的輪播ViewPager,用來展示app首頁的Banner,先看效果圖吧。
使用起來非常方便~~2至3行代碼就能實現上述效果,只要傳入一個list就可以(其中是你需要展示的ImageView),當然也可以自己在這基礎上添加各種Transform動畫。
bannerView = (BannerView) findViewById(R.id.banner);
bannerView.setViewList(viewList);
bannerView.startLoop(true);
實現原理相信大家應該都知道,就是可能懶得去封裝這種東西。
具體思路:
-
- 繼承自FrameLayout,在下層填充一個ViewPager
-
2.根據ViewPager的itemCount去動態生成底部hint小圓點
if (mLinearPosition.getChildCount() != viewSize) {
int diffCnt = mLinearPosition.getChildCount() - viewSize;
boolean needAdd = diffCnt < 0;
diffCnt = Math.abs(diffCnt);
for (int i = 0; i < diffCnt; i++) {
if (needAdd) {
ImageView img = new ImageView(getContext());
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.rightMargin = getResources().getDimensionPixelOffset(R.dimen.dimen_9dp);
img.setLayoutParams(layoutParams);
img.setBackgroundResource(R.drawable.banner_point);
mLinearPosition.addView(img);
} else {
mLinearPosition.removeViewAt(0);
}
}
}
- 3.通過Handler去控制輪播的頻率,重新設置ViewPager的currentItem以及hint小圓點的背景
private static class BannerHandler extends Handler {
private WeakReference<BannerView> weakReference = null;
public BannerHandler(BannerView bannerView) {
super(Looper.getMainLooper());
this.weakReference = new WeakReference<BannerView>(bannerView);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (this.weakReference == null) {
return;
}
BannerView bannerView = this.weakReference.get();
if (bannerView == null || bannerView.mViewPager == null || bannerView.mViewPager.getAdapter() == null || bannerView.mViewPager.getAdapter().getCount() <= 0) {
sendEmptyMessageDelayed(MSG_LOOP, LOOP_INTERVAL);
return;
}
int curPos = bannerView.mViewPager.getCurrentItem();
curPos = (curPos + 1) % bannerView.mViewPager.getAdapter().getCount();
bannerView.mViewPager.setCurrentItem(curPos);
sendEmptyMessageDelayed(MSG_LOOP, LOOP_INTERVAL);
}
}
- 4.具體細節,如無限輪播adapter的創建,handler中的弱引用,啟動銷毀loop等等
項目主頁:http://www.baiduhome.net/lib/view/home/1490082409129
本文由用戶 qnda5002 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!