在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 <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 });
相關資料:
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