1. 程式人生 > >viewpager的無限迴圈方法

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~