1. ImageSwticher介绍
ImageSwitcher是图片切换的控件,它能实现图片切换时的动画效果,包括图片导入效果、图片消失效果等等。Android系统提供了许多不同的动画效果供我们选择。
2. 应用示例
示例说明:新建一个activity,包括一个ImageSwitcher控件。ImageSwitcher中的图片,每5秒钟变换一个。
代码说明:
public class ImageSwitcherTest extends Activity implements ViewFactory {
private ImageSwitcher mSwitcher;
// 图片数组,用于在ImageSwitcher中切换
private Integer[] mImageIds = { R.drawable.pic1,
R.drawable.pic2, R.drawable.pic3, R.drawable.pic4 };
// 图片显示序号
private int mIndex = 0;
private ImageSwitchThread mImgThread;
private static final int MSG_SWITCH_IMG = 0x00000001;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SWITCH_IMG: {
mIndex = (mIndex + 1) % mImageIds.length;
mSwitcher.setImageResource(mImageIds[mIndex]);
break;
}
default:
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.image_switcher_test);
setTitle("ImageShowActivity");
mIndex = 0;
mSwitcher = (ImageSwitcher) findViewById(R.id.ImageSwitcher01);
// setFactory的具体实现参考makeView
mSwitcher.setFactory(this);
// 设置ImageSwitcher移入图片时的动画效果
mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.slide_in_left));
// 设置ImageSwitcher移除图片时的动画效果
mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.slide_out_right));
mImgThread = new ImageSwitchThread();
}
@Override
protected void onResume() {
super.onResume();
if (mImgThread != null)
mImgThread.start();
}
@Override
protected void onPause() {
super.onPause();
if (mImgThread != null)
mImgThread.interrupt();
}
@Override
public void onDestroy() {
super.onDestroy();
}
/*
* makeView()返回的view将被添加到ImageSwitcher中。
* 也就意味着,第一次若没有设置ImageSwitcher的背景,makeView()的返回值,将作为默认背景。
* @author skywang
*/
@Override
public View makeView() {
ImageView i = new ImageView(this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
return i;
}
/**
* 图片更新线程。每5秒更新一次图片
* @author skywang
*
*/
private class ImageSwitchThread extends Thread {
@Override
public void run() {
super.run();
try {
while (!isInterrupted()) {
// 发送消息给mHanlder更换图片
mHandler.sendEmptyMessage(MSG_SWITCH_IMG);
Thread.sleep(5000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
说明:
(01) mSwitcher.setFactory(this); setFactory()的作用是设置ImageSwitcher切换时,用于填充的两个视图。具体的实现是通过makeView()来实现的。
(02) mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left)); 这是来设置ImageSwitcher显示图片时的动画效果,android.R.anim.slide_in_left是android自带的动画效果,即图片显示时,从左边逐渐显示。
(03) mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right)); 这是来设置ImageSwitcher图片消失时的动画效果,android.R.anim.slide_out_right是android自带的动画效果,即图片消失时,从右边逐渐消失。
(04) mImgThread = new ImageSwitchThread(); 用于创建线程,线程ImageSwitchThread的作用是每隔5秒发送消息来更新ImageSwitcher中的图片。
运行效果如下图