Animations 可分为两大类:
一 Tweened Animations,该类Animations提供了旋转,移动,伸展,和淡入淡出等效果
二 Frame-by-Frame Animations ,该类Animations 可以创建一个Drawable序列,这些Drawable可能按照指定的时间一个一个的显示,类似于电影.
Tweened Animations 有这4种分类
1 Alpha 淡入淡出
2 Rotate 旋转
3 Scale 缩放
4 Translate 移动
使用Tweened Animations 的步骤
1. 创建一个Animations 对象
2. 根据需要创建相应的Animation对象
3. 按照需求,为Animation 对象设置相应的数据
4. 将Animation对象添加到AnimationSet对象当中
5. 使用控件对象开始执行AnimationSet
各种Animation 的主要属性
Animation type | attributes | valid values
Alpha fromAlpha/toAlpha Float from 0 to 1
Scale fromXScale/toXScale Float from 0 to 1
fromYScale/toYScale Float from 0 to 1
pivotX/pivotY String of the percentage of graphic
width/height from 0% to 100%
Translate fromX/to X Float from 0 to 1
from Y/to Y Float from 0 to 1
Rotate fromDegrees/toDegrees Float from 0 to 360
pivotX/pivotY String of the percentage of graphic
width/height from 0% to 100%
---------------------------
layout布局文件mian.xml文件
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> android:id="@+id/imageViewId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon" /> android:id="@+id/alphaID" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="淡入淡出效果" /> android:id="@+id/scaleID" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="缩放效果" /> android:id="@+id/rotateID" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="旋转效果" /> android:id="@+id/translateID" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="移动效果" />
activity文件:
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; public class TestAnimation01Activity extends Activity { /** Called when the activity is first created. */ private ImageView imageView = null; private Button alphaButton = null; private Button scaleButton = null; private Button rotateButton = null; private Button translateButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView = (ImageView)findViewById(R.id.imageViewId); alphaButton = (Button)findViewById(R.id.alphaID); alphaButton.setOnClickListener(new AlphaButtonListener()); scaleButton = (Button)findViewById(R.id.scaleID); scaleButton.setOnClickListener(new ScaleButtonListener()); rotateButton = (Button)findViewById(R.id.rotateID); rotateButton.setOnClickListener(new RotateButtonListener()); translateButton = (Button)findViewById(R.id.translateID); translateButton.setOnClickListener(new TranslateButtonListener()); } private class AlphaButtonListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub AnimationSet animationSet = new AnimationSet(true); AlphaAnimation alpha = new AlphaAnimation(1,0); alpha.setDuration(1000); animationSet.addAnimation(alpha); imageView.startAnimation(animationSet); } } private class ScaleButtonListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub AnimationSet animationSet = new AnimationSet(true); ScaleAnimation scale = new ScaleAnimation(1,0.1f,1,0.1f,Animation.RELATIVE_TO_SELF,05f,Animation.RELATIVE_TO_SELF,0.5f); scale.setDuration(2000); animationSet.addAnimation(scale); imageView.startAnimation(scale); } } private class RotateButtonListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub AnimationSet animationSet = new AnimationSet(true); RotateAnimation rotate = new RotateAnimation(0,360,Animation.RELATIVE_TO_PARENT,1f,Animation.RELATIVE_TO_PARENT,0f); rotate.setDuration(5000); animationSet.addAnimation(rotate); imageView.startAnimation(animationSet); } } private class TranslateButtonListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub AnimationSet animationSet = new AnimationSet(true); TranslateAnimation translate = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0.5f); translate.setDuration(2000); animationSet.addAnimation(translate); imageView.startAnimation(animationSet); } } }
Tween Animations 的通用属性
1. setDuration(long durationMills) 设置动画持续时间(单位:毫秒)
2. setFillAfter(boolean fillAfter) 如果fillAfter为true,表示动画执行后,控件将停留在执行结束的状态
3. setFillBefore(boolean fillBefore) 如果fillBefore 的值为true,表示动画执行后,控件将回到动画执行之前的状态
4. setStartOffSet(long startOffSet) 设置动画执行之前的等待时间
5. setRepeatCount(int count) 设置动画重复执行的次数
--------------------
下面再介绍Animations 另一种使用方法
1. 在res文件夹下面新建一个名为anim的文件夹;
2. 创建xml文件,并首先加入set标签,改标签如下:
android:interpolator="@android:anim/acccelerate_interpolator" >
3. 在该标签当中加入rotate,alpha,scale,translate标签
4. 在代码当中使用AnimationUtils当中装载xml文件,并生成 Animation 对象
在rotate.xml文件中
android:pivotX的值共有三种设置方法:
1. android:pivotX="50" 使用绝对位置定位
2. android:pivotX="50%" 使用相对于控件本身定位
3. android:pivotX="50%p" 使用相对于控件的父控件定位