Android学习笔记26:图片切换控件ImageSwitcher的使用

  在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所示。

Android学习笔记26:图片切换控件ImageSwitcher的使用

图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)。

 

 

你可能感兴趣的:(ImageSwitcher)