畫廊控件Gallery的使用

畫廊控件Gallery用來顯示圖片列表,可以用手指直接拖動圖片左右移動。Gallery只能水平顯示一行,且Gallery列表中的圖片會根據不同的拖動情況向左或向右移動,直到顯示到最後一個圖片爲止。

  下面我們就通過一個實例來演示如何實現Gallery畫廊控件功能。

1.xml佈局

  在xml佈局文件中,我們使用LinearLayout對整個界面進行垂直佈局。在界面上端設置一個ImageView控件,用來顯示當前選中的Gallery列表圖片。在界面下端設置一個Gallery控件,用來顯示Gallery列表圖片。整個佈局文件很簡單,具體源碼如下:

複製代碼
 1 <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent" >
 6 
 7     <ImageView
 8         android:id="@+id/imageView"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"    >
11     </ImageView>
12     
13     <Gallery
14         android:id="@+id/gallery"
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content"
17         android:spacing="2dp"
18         android:layout_marginTop="5dp"    >
19     </Gallery>
20     
21 </LinearLayout>
複製代碼

  其中,在Gallery屬性標籤中,android:spacing="2dp"屬性用於指定Gallery列表圖片之間的間隔爲2dp。

  程序運行後的效果如圖1所示。

圖1 主界面

 

2.ImageAdapter適配器

  要實現Gallery畫廊控件功能,需要一個容器來存放Gallery顯示的圖片。我們可以使用一個繼承自BaseAdapter類的派生類ImageAdapter來裝這些圖片。

  在ImageAdapter類中我們需要實現Adapter類中的如下四個抽象方法:

  (1)public int getCount();

  (2)public Object getItem(int position);

  (3)public long getItemId(int position);

  (4)public View getView(int position, View convertView, ViewGroup parent);

  其中,getCount()方法用於獲取ImageAdapter適配器中圖片個數;getItem()方法用於獲取圖片在ImageAdapter適配器中的位置;getItemId()方法用於獲取圖片在ImageAdapter適配器中位置;getView()用於獲取ImageAdapter適配器中指定位置的視圖對象。上述四個抽象方法的具體實現方法如下:

複製代碼
 1   /*
 2      * Function   :    ImageAdapter類,繼承自BaseAdapter
 3      * Author     :    博客園-依舊淡然
 4      */
 5     public class ImageAdapter extends BaseAdapter {
 6 
 7         Context mContext;        //上下文對象
 8         
 9         //構造方法
10         public ImageAdapter(Context context) {
11             this.mContext = context;
12         }
13         
14         //獲取圖片的個數
15         public int getCount() {
16             return mImageResourceIds.length;
17         }
18 
19         //獲取圖片在庫中的位置
20         public Object getItem(int position) {
21             return mImageResourceIds[position];
22         }
23 
24         //獲取圖片在庫中的位置
25         public long getItemId(int position) {
26             return position;
27         }
28 
29         //獲取適配器中指定位置的視圖對象
30         public View getView(int position, View convertView, ViewGroup parent) {
31             ImageView imageView = new ImageView(mContext);
32             imageView.setImageResource(mImageResourceIds[position]);
33             imageView.setLayoutParams(new Gallery.LayoutParams(120, 120));
34             imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
35             return imageView;
36         }
37         
38     }
複製代碼

  其中,imageView.setImageResource(mImageResourceIds[position])用於將ImageAdapter中的指定位置圖片資源加載到imageView中。imageView.setLayoutParams(new Gallery.LayoutParams(120, 120))用於設置Gallery中圖片的顯示大小。imageView.setScaleType(ImageView.ScaleType.FIT_CENTER)用於設置imageView中圖片的縮放顯示格式。

 

3.加載適配器

  實現了ImageAdapter類之後,我們可以通過setAdapter()方法把資源文件添加到Gallery中進行顯示即可。

 

4.Gallery事件監聽器

  除此之外,爲了在如圖1所示的界面上端的ImageView控件中同步顯示Gallery控件中的當前圖片。還需要對Gallery控件進行事件監聽,以便獲知用戶選中了Gallery控件中的哪一張圖片。具體的實現方法如下:

1   mGallery.setOnItemClickListener(new OnItemClickListener() {
2       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
3             mImageView.setBackgroundResource(mImageResourceIds[arg2]);
4        }
5    });

 

 

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