Gallery實現無限循環的方法

Android的控件Gallery提供一個畫廊效果,通過左右滑動,可以水平滾動瀏覽Gallery中的圖片。網上的教程或者Gallery都介紹這個控件用來顯示圖片(Image),但其實,它可以顯示任意的View,當然也包括Layout了。


Gallery只能從第一項開始,滾動瀏覽到最後一項。瀏覽最後一項後,就不能再滾動,只能回退瀏覽。但是,我們想達到這樣的效果:

在Gallery中顯示了4張圖片,分別是“西施”、“楊貴妃”、“王昭君”、“貂蟬”。



 
        瀏覽效果是,每屏只顯示一個圖片,向左滑動時顯示前一個圖片,向左滑動時顯示後一個圖片。當向右瀏覽到第4張圖片“貂蟬”時,再向右滑動時,回到第一張圖片,進行循環瀏覽。
在實現這樣的效果,首先要對Gallery的Adapter進行修改。
無論你使用哪個Adapter,都需要修改兩處的:
1、public int getCount() 方法要返回一個很大的數。它表示Adapter提供的數據在數量。比如上面四個圖片,它返回的就是4。這個數字的意義就是:當你向右滑動四次之後,它就不再向右滑動了,哪怕你後面還有數據。要實現無限循環,必須把它修改成一個很大的值。什麼值最大呢?Integer.MAX_VALUE 肯定夠大,20億啊。
2、public View getView(int position, View convertView, ViewGroup parent) 中的position值,是實現循環的關鍵。它表示當前要顯示的哪一個VIEW。舉例說,上面四張圖,剛顯示時,position = 0,當向右滑動,顯示下一個圖片是,position = 1。再向右滑動,顯示第三張時,position = 2。如果向左滑動,回退瀏覽第二張圖片時,position = 1。
如此,當我們瀏覽到第四張圖片時,position = 3 ,按我們想實現的效果,再向左滑動時,要顯示的圖上應該是第一張,即 position = 0 纔行。所以,關鍵是要實現 position 從 0 到 3 的循環。這個好辦,通過取餘就可以實現了。
我使用SimpleAdapter向Gallery提供數據,查看Android的SimpleAdapter源碼:

/**
        
	 * @see android.widget.Adapter#getCount()
	 */
	public int getCount() {
		return mData.size();
	}
	/**
	 * @see android.widget.Adapter#getView(int, View, ViewGroup)
	 */
	public View getView(int position, View convertView, ViewGroup parent) {
		return createViewFromResource(position, convertView, parent, mResource);
	}
 
       要修改這兩個方法,很簡單,我們繼承SimpleAdapter,然後Override這兩個方法:

    public class EndlessSimpleAdapter extends SimpleAdapter{
		private int count ;
		@Override
		public int getCount(){
			count = super.getCount(); //下面要計算。
			return Integer.MAX_VALUE;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent){
			//只修改它的position,其實交給父級處理。
			return per.getView(position % count,convertView,parent);
		}
	}
 

   然後,使用EndlessSimpleAdapter向Gallery提供數據,就可以實現無限循環了。

 

    橋下一粒砂 http://chenyoca.iteye.com 原創文章,轉載請聲明作者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章