标签:
android动画:
3.0以前,android支持两种动画模式,tween animation,frame animation,
3.0中又引入了一个新的动画系统:property animation,
这三种动画模式在SDK中被称为
property animation, 属性动画:
view animation, 补间动画: 给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。
(Tween animation)
drawable animation。 帧动画: 就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果(Frame animation)
一、View Animation 补间动画
1.创建布局文件---》res--》anim--->设置效果
2.在代码中:
1)初始化Animation对象 通过AnimationUtils.loadAnimation(上下文,布局文件);
2)给控件设置动画的效果: view.startAnimation();
用XML定义的动画放在/res/anim/文件夹内,
XML文件的根元素可以为(淡入淡出, 缩放, 平移, 旋转,xx, 集合 )
<alpha>,<scale>,<translate>,<rotate>,interpolator元素或<set>(表示以上几个动画的集合,set可以嵌套)。
默认情况下,所有动画是同时进行的,可以通过startOffset属性设置各个动画的开始偏移(开始时间)来达到动画顺序播放的效果。
可以通过设置interpolator属性改变动画渐变的方式,如AccelerateInterpolator,
开始时慢,然后逐渐加快。默认为AccelerateDecelerateInterpolator。
定义好动画的XML文件后,可以通过类似下面的代码对指定View应用动画。
public class MainActivity extends Activity {
private Animation animation;
private ImageView iv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.imageView1);
//初始化Animation对象
animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
//设置动画效果
iv.startAnimation(animation);
}
}
alpha.xml, 淡入淡出 <alpha /> 设置属性
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000" //动画的执行时间
android:fromAlpha="0" //开始的透明度
android:repeatCount="5" //重复的次数
android:toAlpha="2" > //结束的透明度
</alpha>
rotate.xml 旋转
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromDegrees="0"
android:pivotX="0"
android:pivotY="0"
android:repeatCount="-1"
android:toDegrees="360" >
</rotate>
缩放 scale.xml
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="4000"
android:fromXScale="0"
android:fromYScale="0"
android:repeatCount="5"
android:toXScale="2"
android:toYScale="2" >
</scale>
平移 traslate.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXDelta="0"
android:fromYDelta="0"
android:repeatCount="3"
android:toXDelta="200"
android:toYDelta="200" >
</translate>
集合:set.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fromAlpha="0" android:repeatCount="5" android:toAlpha="2" /> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromDegrees="0" android:pivotX="50" android:pivotY="50" android:repeatCount="-1" android:toDegrees="360" > </rotate> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="4000" android:fromXScale="0" android:fromYScale="0" android:repeatCount="5" android:toXScale="2" android:toYScale="2" > </scale> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fromXDelta="0" android:fromYDelta="0" android:repeatCount="3" android:toXDelta="200" android:toYDelta="200" > </translate> </set>
另外可以不使用xml文件,直接设置属性
Animations extends Object implements Cloneable
使用TweenedAnimations的步骤:
1.创建一个AnimationSet对象(Animation子类);
2.增加需要创建相应的Animation对象;
3.更加项目的需求,为Animation对象设置相应的数据;
4.将Animatin对象添加到AnimationSet对象当中;
5.使用控件对象开始执行AnimationSet。
1、setDuration(long durationMills) 设置动画持续时间(单位:毫秒)
2、setFillAfter(Boolean fillAfter) 如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态
3、setFillBefore(Boolean fillBefore) 如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态
4、setStartOffSet(long startOffSet) 设置动画执行之前的等待时间
5、setRepeatCount(int repeatCount) 重复的次数
Animation的四个子类:
AlphaAnimation、TranslateAnimation、ScaleAnimation、RotateAnimation
四、具体实现
AlphaAnimation:
//1.创建一个AnimationSet对象(Animation子类);
AnimationSet aset = new AnimationSet(true);
//2.增加需要创建相应的Animation对象;1表示完全不透明,0表示完全透明
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
//3.更加项目的需求,为Animation对象设置相应的数据;
alphaAnimation.setDuration(3000);//设置动画的执行时间
alphaAnimation.setRepeatCount(1);
//4.将Animatin对象添加到AnimationSet对象当中;
aset.addAnimation(alphaAnimation);
//5.使用控件对象开始执行AnimationSet
iv.startAnimation(aset);//注意执行的是AnimationSet(Animation子类)
RotateAnimation
//1.创建一个AnimationSet对象(Animation子类);
AnimationSet aset = new AnimationSet(true);
//2.增加需要创建相应的Animation对象;
RotateAnimation animaiton = new RotateAnimation(
0, //旋转开始角度
360, //结束角度
//确定x轴坐标的类型:有ABSOLUT绝对坐标、RELATIVE_TO_SELF相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
//3.更加项目的需求,为Animation对象设置相应的数据;
animaiton.setDuration(3000);//设置动画的执行时间
animaiton.setRepeatCount(1);
//4.将Animatin对象添加到AnimationSet对象当中;
aset.addAnimation(animaiton);
//5.使用控件对象开始执行AnimationSet
iv.startAnimation(aset);
ScaleAnimation
//1.创建一个AnimationSet对象(Animation子类);
AnimationSet aset = new AnimationSet(true);
//2.增加需要创建相应的Animation对象;
//参数1:x轴的初始值
//参数2:x轴收缩后的值
//参数3:y轴的初始值
//参数4:y轴收缩后的值
//参数5:确定x轴坐标的类型
//参数6:x轴的值,0.5f表明是以自身这个控件的一半长度为x轴
//参数7:确定y轴坐标的类型
//参数8:y轴的值,0.5f表明是以自身这个控件的一半长度为x轴
ScaleAnimation animaiton = new ScaleAnimation(
0, 0.1f, 0, 0.1f,
Animation.RELATIVE_TO_SELF,
0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
//3.更加项目的需求,为Animation对象设置相应的数据;
animaiton.setDuration(3000);//设置动画的执行时间
animaiton.setRepeatCount(1);
//4.将Animatin对象添加到AnimationSet对象当中;
aset.addAnimation(animaiton);
//5.使用控件对象开始执行AnimationSet
iv.startAnimation(aset);
TranslateAnimation
//1.创建一个AnimationSet对象(Animation子类);
AnimationSet aset = new AnimationSet(true);
//2.增加需要创建相应的Animation对象;
//参数1~2:x轴的开始位置
//参数3~4:y轴的开始位置
//参数5~6:x轴的结束位置
//参数7~8:x轴的结束位置
TranslateAnimation animaiton = new TranslateAnimation(
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0.5f);
//3.更加项目的需求,为Animation对象设置相应的数据;
animaiton.setDuration(3000);//设置动画的执行时间
animaiton.setRepeatCount(1);
animaiton.setFillAfter(true);
//4.将Animatin对象添加到AnimationSet对象当中;
aset.addAnimation(animaiton);
//5.使用控件对象开始执行AnimationSet
iv.startAnimation(aset);
标签:
原文地址:http://www.cnblogs.com/chengbao/p/5628385.html