本文实例讲述了Android开发实现广告无限循环功能。分享给大家供大家参考,具体如下:
一、效果图:
二、代码实现:
/**
* 新闻首页
*
* @Project App_Card
* @Package com.android.koomama.fragment.home
* @author chenlin
* @version 1.0
* @Date 2014年6月22日
* @Note TODO
*/
public class NewsHomeFragment extends BaseFragment implements OnTouchListener {
private ImageHandler mHandler = new ImageHandler(new WeakReference(this));
private ViewPager mViewPager;
// 自定义轮播图的资源
private int[] mImageResIds = { R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5 };
// 放轮播图片的ImageView 的list
private List mImageList = new ArrayList();
// 放圆点的View的list
private List mDotList = new ArrayList();
@Override
public View initConvertView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_news_main, container, false);
}
@Override
protected void onVisible(boolean isInit) {
if (isInit) {
initViews();
}
}
private void initViews() {
// 初始化iewPager的内容
mViewPager = (ViewPager) mConvertView.findViewById(R.id.view_pager);
LinearLayout dotLayout = (LinearLayout) mConvertView.findViewById(R.id.dotLayout);
dotLayout.removeAllViews();
for (int i = 0; i viewlist;
public ImageAdapter(List viewlist) {
this.viewlist = viewlist;
}
@Override
public int getCount() {
// 设置成最大,使用户看不到边界
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// Warning:不要在这里调用removeView
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 对ViewPager页号求模取出View列表中要显示的项
position %= viewlist.size();
if (position weakReference;
private int currentItem = 0;
// private boolean isOnce = true;
protected ImageHandler(WeakReference wk) {
weakReference = wk;
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
final NewsHomeFragment fragment = weakReference.get();
if (fragment == null) {
// Activity已经回收,无需再处理UI了
return;
}
// 第一次不删重复的消息
if (currentItem != 0) {
// 检查消息队列并移除未发送的消息,这主要是避免在复杂环境下消息出现重复等问题。
if (fragment.mHandler.hasMessages(MSG_UPDATE_IMAGE)) {
fragment.mHandler.removeMessages(MSG_UPDATE_IMAGE);
}
}
switch (msg.what) {
case MSG_UPDATE_IMAGE:
currentItem++;
fragment.mViewPager.setCurrentItem(currentItem);
// 准备下次播放
fragment.mHandler.sendEmptyMessageDelayed(MSG_UPDATE_IMAGE, MSG_DELAY);
break;
case MSG_KEEP_SILENT:
// 只要不发送消息就暂停了
break;
case MSG_BREAK_SILENT:
fragment.mHandler.sendEmptyMessageDelayed(MSG_UPDATE_IMAGE, MSG_DELAY);
break;
case MSG_PAGE_CHANGED:
// 记录当前的页号,避免播放的时候页面显示不正确。
int position = msg.arg1;
int lastIndex = 0;
int index = position % fragment.mImageList.size();
for (int i = 0; i
三、布局