为了让活动能不断更新视图控件的内容,为每一个视图控件绑定动画特效显得非常繁琐,但是Android SDK提供的ViewSwitcher控件,能够高效简便地更新视图。
ViewSwitcher有两个子视图控件,并处理从当前子视图到下一个子视图的过渡。ViewSwitcher的子视图控件是使用ViewFactory以编程方式生成的。
ViewSwitcher有两个子类:
→ TextSwitcher:让您能够在两个TextView控件之间切换。
→ ImageSwitcher:让您能够在两个ImageView控件之间切换。
下面以ImageSwitcher为例来说一下使用的步骤:
1、 制作两个动画特效switcher_in.xml和switcher_out.xml:
switcher_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:pivotX="99%"
android:pivotY="99%"
android:duration="500" />
<alpha
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="500"/>
</set>
switcher_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0"
android:toXScale="0.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:pivotX="1%"
android:pivotY="1%"
android:duration="500"/>
<alpha
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500"/>
</set>
2、 在布局文件中添加ImageSwitcher,并将刚创建的动画与其绑定:
<ImageSwitcher
android:id="@+id/imageSwitcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inAnimation="@anim/switcher_in"
android:outAnimation="@anim/switcher_out">
</ImageSwitcher>
3、 为ImageSwitcher创建布局资源image_switcher_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter" >
</ImageView>
4、初始化ImageSwitcher控件,实现自定义ViewFactory类:
private ImageSwitcher imageSwitcher;
private float touchDownX , touchUpX;
int index = 0;
int[] arrayImage = {R.drawable.a7 , R.drawable.a9 , R.drawable.a11 , R.drawable.a12};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageSwitcher = (ImageSwitcher)findViewById(R.id.imageSwitcher);
imageSwitcher.setFactory(new MyImageFacotry());
imageSwitcher.setImageResource(arrayImage[index]);
}
private class MyImageFacotry implements ViewFactory
{
public View makeView()
{
ImageView imageView = (ImageView)LayoutInflater.from(getApplicationContext()).inflate(R.layout.image_switcher_view, imageSwitcher, false);
return imageView;
}
}
5、 为ImageSwitcher添加手势滑动监听效果:
imageSwitcher.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent arg1)
{
if (arg1.getAction() == MotionEvent.ACTION_DOWN)
{
touchDownX = arg1.getX();
return true;
}
else if(arg1.getAction() == MotionEvent.ACTION_UP)
{
touchUpX = arg1.getX();
if (touchDownX - touchUpX > 100)//左滑
{
if (index >0 )
{
imageSwitcher.setInAnimation(getApplicationContext(), R.anim.switcher_in_right);
imageSwitcher.setOutAnimation(getApplicationContext(), R.anim.switcher_out_right);
imageSwitcher.setImageResource(arrayImage[index]);
index--;
}
}
else
{
if (index < 3)
{
imageSwitcher.setInAnimation(getApplicationContext(), R.anim.switcher_in_left);
imageSwitcher.setOutAnimation(getApplicationContext(), R.anim.switcher_out_left);
imageSwitcher.setImageResource(arrayImage[index]);
index++;
}
}
return true;
}
return false;
}
});
源码下载地址:动画特效的应用----ViewSwitcher控件.docx