无限轮播的实现

不少软件的主页都会有一个Banner,通俗的说就是广告条,可以无限轮播广告图片,那么是怎么实现的呢?

MainActivity代码如下:

package com.bawei.rollview;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

import com.bawei.rollview.adapter.MyPageAdapter;

public class MainActivity extends Activity {

    private ViewPager vp;
	private LinearLayout ll;
	private String[] ImageUrl=new String[]{
			"http://169.254.25.59:8080/a.bmp",
			"http://169.254.25.59:8080/b.bmp",
			"http://169.254.25.59:8080/c.bmp",
			"http://169.254.25.59:8080/d.bmp",
			"http://169.254.25.59:8080/e.bmp"
	};
	private ArrayList<ImageView> imageList;
	
	Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			if (msg.what==0) {
				//拿到当前的页面索引值
				int currentItem = vp.getCurrentItem();
				currentItem++;
				//设置索引值
				vp.setCurrentItem(currentItem);
				
				handler.sendEmptyMessageDelayed(0, 3000);
			}
		};
	};


	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        vp = (ViewPager) findViewById(R.id.vp);
        ll = (LinearLayout) findViewById(R.id.ll);
        
        //设置适配器
        vp.setAdapter(new MyPageAdapter(this,ImageUrl));
        
        //初始化小圆点
        initDots();
        
        //设置当前页面的一个条目
        vp.setCurrentItem(imageList.size()*3000);
        
        //为vp设置监听
        vp.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int position) {
				for (int i = 0; i < imageList.size(); i++) {
					if (i==position%ImageUrl.length) {
						imageList.get(i).setImageResource(R.drawable.focus);
					}else{
						imageList.get(i).setImageResource(R.drawable.defaults);
					}
				}
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				
			}
		});
        
        handler.sendEmptyMessageDelayed(0, 3000);
    }

	/**
	 * 初始化小圆点
	 */
	private void initDots() {
		imageList = new ArrayList<ImageView>();
		imageList.clear();//清空集合中的元素
		ll.removeAllViews();//移除布局中的控件
		for (int i = 0; i < ImageUrl.length; i++) {
			//创建一个ImageView控件
			ImageView imageView = new ImageView(this);
			if (i==0) {
				//点亮的小圆点
				imageView.setImageResource(R.drawable.focus);
			}else{
				//默认的小圆点
				imageView.setImageResource(R.drawable.defaults);
			}
			LayoutParams params=new LayoutParams(20, 20);
			params.setMargins(5, 0, 5, 0);
			//将圆点添加到集合中
			imageList.add(imageView);
			//将圆点添加到布局中
			ll.addView(imageView,params);
		}
	}
}
下面是adapter的代码:

package com.bawei.rollview.adapter;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.lidroid.xutils.BitmapUtils;

public class MyPageAdapter extends PagerAdapter {
	private Context context;
	private String[] ImageUrl;
	
	public MyPageAdapter(Context context, String[] imageUrl) {
		super();
		this.context = context;
		ImageUrl = imageUrl;
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return arg0==arg1;
	}
	
	@Override
	public int getCount() {
		return Integer.MAX_VALUE;
	}
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		ImageView image = new ImageView(context);
		
		BitmapUtils bitmap = new BitmapUtils(context);
		
		bitmap.display(image, ImageUrl[position%ImageUrl.length]);
		
		container.addView(image);
		
		return image;
	}
	@Override
	public void destroyItem(ViewGroup container, int position,
			Object object) {
		container.removeView((View)object);
	}
}

完成以上代码就可以实现无限轮播图了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值