在Android中,畫廊控制項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 <Gallery14 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 });
相關資料:
Android控制項之Gallery圖片集
http://www.cnblogs.com/salam/archive/2010/10/06/1844564.html
Android Gallery組件詳解
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182297
Android控制項Gallery 3D效果
http://android.tgbus.com/Android/tutorial/201108/362438.shtml
AndroidGUI21:ImageSwitcher常用技巧
http://blog.csdn.net/pathuang68/article/details/6541823