轻松学会android中补间动画

补间动画是什么?

我们在开发一个动画的时候,开发者没必要完成动作的每一帧,只需要定义开始和结束的关键帧,剩余中间部分,是由android自动计算并实现的;

大体可以分以下四类:

透明度动画AlphaAnimation

AlphaAnimation (float fromAlpha, float toAlpha)

     参数说明

     fromAlpha:开始时刻的透明度,取值范围0~1。

     toAlpha:结束时刻的透明度,取值范围0~1。
 //透明度动画
 //          AlphaAnimation animation=new AlphaAnimation(0.0f,1.0f);
//
//                animation.setDuration(3000);
//                imageView.startAnimation(animation);

位移动画TranslateAnimation

TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

     参数说明

     fromXDelta:位置变化的起始点X坐标。

     toXDelta:位置变化的结束点X坐标。

     fromYDelta:位置变化的起始点Y坐标。

     toYDelta:位置变化的结束点Y坐标。
//位移动画
//                TranslateAnimation animation=new TranslateAnimation(-imageView.getWidth(),0,0,0);
//                animation.setDuration(3000);
//                imageView.startAnimation(animation);

缩放动画ScaleAnimation

public ScaleAnimation (float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

     参数说明:

     fromX:起始X坐标上的伸缩尺寸。

     toX:结束X坐标上的伸缩尺寸。

     fromY:起始Y坐标上的伸缩尺寸。

     toY:结束Y坐标上的伸缩尺寸。

     pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、        RELATIVE_TO_PARENT。

     pivotXValue:X坐标的伸缩值。

     pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。

     pivotYValue:Y坐标的伸缩值。
  //缩放
//                ScaleAnimation animation=new ScaleAnimation(0,0.5f,0,0.5f);
//                animation.setDuration(3000);
//                imageView.startAnimation(animation);

旋转动画RotateAnimation

RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

     参数说明

     fromDegrees:旋转的开始角度。

     toDegrees:旋转的结束角度。

     pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、        RELATIVE_TO_PARENT。

     pivotXValue:X坐标的伸缩值。

     pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。

     pivotYValue:Y坐标的伸缩值。
 //旋转动画
//                RotateAnimation animation=new RotateAnimation(0,360);
//                animation.setDuration(3000);
//                imageView.startAnimation(animation);

动画集合AnimationSet

什么是AnimationSet?
我们在上面介绍的四中补间动画都是单一的使用的,当我们想混合使用的时候就需要AnimationSet来帮忙了。
用法如下

 AnimationSet set=new AnimationSet(false);
                AlphaAnimation animation1=new AlphaAnimation(0.0f,1.0f);
                TranslateAnimation animation2=new TranslateAnimation(0,imageView.getWidth(),0,0);
                ScaleAnimation animation3=new ScaleAnimation(0,0.9f,0,0.9f);
                RotateAnimation animation4=new RotateAnimation(200,360);
                animation1.setDuration(3000);
                animation2.setDuration(3000);
                animation3.setDuration(3000);
                animation4.setDuration(3000);
                set.addAnimation(animation1);
                set.addAnimation(animation2);
                set.addAnimation(animation3);
                set.addAnimation(animation4);

                imageView.startAnimation(set);

XML中定义动画

上面动画的使用都是在Java代码中实现的。其实我们可以在XML当中的资源文件中定义:

<set xmlns:android="http://schemas.android.com/apk/res/android">


        android:interpolator="@android:anim/accelerate_interpolator">


        <!--旋转动画-->
        <!--轴心点pivotX、pivotY-->
        <!--重复2此转3次-->
        <rotate
            android:duration="3000"
            android:fromDegrees="0"
            android:toDegrees="360"

            android:pivotX="5%"
            android:pivotY="5%"
            android:repeatCount="2">


        </rotate>


        <!--缩放动画-->
        <scale
            android:startOffset="9000"
            android:duration="2000"
            android:fromXScale="0.5"
            android:toXScale="1.0"
            android:fromYScale="0.5"
            android:toYScale="1.0"
            android:pivotX="50%"
            android:pivotY="50%">

        </scale>



</set>

既然定义了,如何在代码中使用动画呢???

  //在XML当中定义动画
               AnimationUtils utils=new AnimationUtils();
               Animation animation= utils.loadAnimation(getApplicationContext(), R.anim.animator_rotate);

               imageView.startAnimation(animation);

可以看到上面我们使用了interpolator,什么是interpolator??

interpolator翻译为:插值,补间动画只是定义了开始结束关键帧,并没有控制中间帧的,interpolator就是用来控制动画变化速度,插入帧的密度位置等的。

android:interpolator

AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速

AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速

AnticipateInterpolator 开始的时候向后然后向前甩

AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值

BounceInterpolator 动画结束的时候弹起

CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator 在动画开始的地方快然后慢

LinearInterpolator 以常量速率改变

OvershootInterpolator 向前甩一定值后再回到原来位置

动画的公共函数

     setDuration(float time)动画执行时间;

     setFillAfter(boolean b)是否保持动画结束时状态;

     setFillBefore(boolean b)是否返回动画开始状态,当动画结束后;

     setStartOffset(long time)经过多少时间动画开始执行;

     setRepeatCount(int i)动画重复次数(默认为0)。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值