viewpager的无限循环方法

现在我们继续上一篇的讲述,这次来讲讲关于ViewPager的无限循环方法。

对于viewpager控件的加载和适配器的加载,上一篇已经有了,我们直接在上一篇的基础上进行改进,这就是所谓的代码的复用。

这次我们使用handler消息机制以及线程来对界面进行更新,话不多说,看看代码。

<pre name="code" class="java">public class MainActivity extends ActionBarActivity {

	public static final int CHANG_OK = 1;
	private int[] res = new int[]{R.drawable.girl,R.drawable.girl2,R.drawable.girl3,R.drawable.girl4,R.drawable.girl5};
	private ViewPager viewPager;
	private List<ImageView> imageViews = new ArrayList<ImageView>();
	private Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case CHANG_OK:
				if(viewPager.getCurrentItem()/(res.length-1)==1)
				{
					viewPager.setCurrentItem(viewPager.getCurrentItem()%(res.length-1));
				}else {
					viewPager.setCurrentItem(viewPager.getCurrentItem()%(res.length-1)+1);
				}
					
				break;

			default:
				break;
			}
		};
	};

 
以上代码是创建了一个handler实例,并且在接收线程消息后进行相关的界面更新,很简单,看一下代码就清楚了,然后后面增加了线程的更新信息的发送,笔者设置了每隔两秒就界面跟新一次,当然你也可以设置你的线程更新时间,这个无所谓。 

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		viewPager = (ViewPager) findViewById(R.id.viewPager);
		viewPager.setAdapter(new PagerAdapter() {
			
			@Override
			public Object instantiateItem(ViewGroup container, int position) {
				ImageView imageView = new ImageView(MainActivity.this);
				imageView.setImageResource(res[position]);
				imageView.setScaleType(ScaleType.CENTER_CROP);
				container.addView(imageView);
				imageViews.add(imageView);
				return imageView;
			}
			
			@Override
			public void destroyItem(ViewGroup container, int position, Object object) {
				// TODO Auto-generated method stub
				container.removeView(imageViews.get(position));
			}
			
			@Override
			public boolean isViewFromObject(View arg0, Object arg1) {
				// TODO Auto-generated method stub
				return arg0 == arg1;
			}
			
			@Override
			public int getCount() {
				// TODO Auto-generated method stub
				return res.length;
			}
		});
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
					while (true) {
						Thread.sleep(2000);
						handler.sendEmptyMessage(CHANG_OK);
					}
					
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}).start();
		
	}
为了让thread能一直的发送消息,笔者设置了无限制的while(true),并且为了让大家更清楚,笔者将整个源码都放了上去,最后运行的效果和上一篇相似,只是多了自动切换界面的功能和无限循环功能。

end~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值