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

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

 

 

posted @ 2013-03-01 23:45  依旧淡然  阅读(12512)  评论(0编辑  收藏  举报