在Windows操作系統中,要查看多張圖片,可以通過使用“Windows照片查看器”在“上一張”和“下一張”之間切換,進行多張圖片的瀏覽。
在Android中,可以通過使用圖片切換控件ImageSwitcher來實現瀏覽多張圖片的功能。下面我們就通過一個實際的例子來說明圖片切換控件ImageSwitcher的使用方法。
1.界面布局
在xml布局文件中,我們使用LinearLayout對整個界面進行垂直布局。在界面的頂端設置了一個水平居中的ImageSwitcher控件,用來顯示多張圖片。在ImageSwitcher控件的下面使用LinearLayout水平布局設置四個ImageButton按鈕,在點擊這些按鈕時分別用於實現右旋圖片、顯示上一張圖片、顯示下一張圖片、左旋圖片效果。整個布局文件很簡單,具體源碼如下:
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 <ImageSwitcher 8 android:id="@+id/imageSwitcher" 9 android:layout_marginTop="5dp" 10 android:layout_gravity="center" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" ></ImageSwitcher> 13 14 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 15 xmlns:tools="http://schemas.android.com/tools" 16 android:orientation="horizontal" 17 android:layout_marginTop="5dp" 18 android:layout_width="match_parent" 19 android:layout_height="match_parent" > 20 21 <!-- 右旋箭頭 --> 22 <ImageButton 23 android:id="@+id/rightrotatearrow" 24 android:layout_marginLeft="30dp" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:src="@drawable/rightrotatearrow" ></ImageButton> 28 29 <!-- 前一個箭頭 --> 30 <ImageButton 31 android:id="@+id/forwardarrow" 32 android:layout_width="wrap_content" 33 android:layout_height="wrap_content" 34 android:src="@drawable/forwardarrow" ></ImageButton> 35 36 <!-- 下一個箭頭 --> 37 <ImageButton 38 android:id="@+id/nextarrow" 39 android:layout_width="wrap_content" 40 android:layout_height="wrap_content" 41 android:src="@drawable/nextarrow" ></ImageButton> 42 43 <!-- 左旋箭頭 --> 44 <ImageButton 45 android:id="@+id/liftrotatearrow" 46 android:layout_width="wrap_content" 47 android:layout_height="wrap_content" 48 android:src="@drawable/liftrotatearrow" ></ImageButton> 49 50 </LinearLayout> 51 52 </LinearLayout>
程序運行后的效果如圖1所示。
圖1 主界面
2.ViewFactory接口
要將圖片顯示在ImageSwitcher控件中,必須為ImageSwitcher類設置一個ViewFactory,用來將顯示的圖片和父窗口區分開來。這可以通過如下方法來實現:
mImageSwitcher.setFactory();
此外,我們還需要實現ViewSwitcher.ViewFactory接口中的makeView()抽象方法,通過該方法可以返回一個ImageView對象,所有圖片都將通過該ImageView對象來進行顯示。具體實現方法如下:
1 /* 2 * Function : makeView() 3 * Describe : 將所有圖片通過ImageView來顯示 4 * Author : 博客園-依舊淡然 5 */ 6 public View makeView() { 7 return new ImageView(this); 8 }
3.存儲圖片資源
在《Android學習筆記25:畫廊控件Gallery的使用》(http://www.cnblogs.com/menlsh/archive/2013/02/26/2934434.html)中,我們是通過使用一個繼承自BaseAdapter類的派生類ImageAdapter來存儲圖片資源的。
在該實例中,我們將新建一個ArrayList對象來存儲圖片資源,方法如下:
List<Drawable> list = new ArrayList<Drawable>();
然后,可以使用list.add()方法將圖片資源加載到該ArrayList對象中,具體方法如下:
1 //將圖片資源加載到ArrayList中 2 list.add(getResources().getDrawable(R.drawable.image1)); 3 list.add(getResources().getDrawable(R.drawable.image2)); 4 list.add(getResources().getDrawable(R.drawable.image3)); 5 list.add(getResources().getDrawable(R.drawable.image4));
在該實例中,我們往ArrayList中加載了4張資源圖片。
4.獲取圖片資源
當我們點擊“上一張”和“下一張”按鈕時,需要獲取圖片資源進行顯示,這該如何實現呢?
通過查看ImageSwitcher的API幫助文檔(http://developer.android.com/reference/android/widget/ImageSwitcher.html),我們可以看出向ImageSwitcher加載圖片有以下三種方式:
(1)public void setImageDrawable(Drawable drawable);
(2)public void setImageResource(int resid);
(3)public void setImageURI(Uri uri);
其中,setImageDrawable()方法通過Drawable對象來獲取圖片資源;setImageResource()方法通過圖片資源Id來獲取圖片資源;setImageURI()方法通過圖片的Uri路徑來獲取圖片資源。
在該實例中,我們選擇使用setImageDrawable()方法來獲取圖片資源,這也就是為什么我們往ArrayList對象中存儲圖片時使用Drawable對象的原因。
5.按鍵處理
在該實例中,我們還需要實現OnClickListener接口的onClick()方法,對四個按鍵進行事件監聽,具體實現方法如下:
1 /* 2 * Function : 事件監聽處理 3 * Author : 博客園-依舊淡然 4 */ 5 public void onClick(View v) { 6 switch (v.getId()) { 7 case R.id.forwardarrow: //向前箭頭按鈕按鍵處理 8 index--; 9 if (index < 0) { 10 index = list.size() - 1; 11 } 12 mImageSwitcher.setImageDrawable(list.get(index)); 13 break; 14 case R.id.nextarrow: //向后箭頭按鈕按鍵處理 15 index++; 16 if (index >= list.size()) { 17 index = 0; 18 } 19 mImageSwitcher.setImageDrawable(list.get(index)); 20 break; 21 case R.id.liftrotatearrow: //左旋箭頭按鈕按鍵處理 22 //TO DO 23 break; 24 case R.id.rightrotatearrow: //右旋箭頭按鈕按鍵處理 25 //TO DO 26 break; 27 } 28 }
其中,變量index用於對圖片進行索引,實現圖片的循環顯示,即當顯示到最后一張圖片時,再次點擊“下一張”,則將圖片索引號重置為0,然后重新顯示第一張圖片;當顯示第一張圖片時,再次點擊“上一張”,則將圖片的索引號重置為最大,然后顯示最后一張圖片。
在該實例中,並未對“左旋”和“右旋”按鈕進行按鍵處理。要實現圖片的旋轉效果,請見博文《Android學習筆記11:圖像的平移、旋轉及縮放》(http://www.cnblogs.com/menlsh/archive/2012/12/02/2798802.html)。