android 动画 补间动画

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 动画 补间动画相关的知识,希望对你有一定的参考价值。

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>
View Code

 

另外可以不使用xml文件,直接设置属性

Animations extends Object implements Cloneable  

使用TweenedAnimations的步骤:

1.创建一个AnimationSet对象(Animation子类);

2.增加需要创建相应的Animation对象;

3.更加项目的需求,为Animation对象设置相应的数据;

4.将Animatin对象添加到AnimationSet对象当中;

5.使用控件对象开始执行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 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); 

 

以上是关于android 动画 补间动画的主要内容,如果未能解决你的问题,请参考以下文章

Android 动画使用及源码分析

Android补间动画(附带Demo案例)

【Android 动画】动画详解之补间动画(一)

Android中补间动画和属性动画

android高级UI之补间动画和属性动画

android动画笔记