Android动画(2)--TweenAnimation(补间动画)

来源:互联网 发布:网络暴力现象分析 编辑:程序博客网 时间:2024/05/16 01:54

本节我们来讲补间动画

补间动画的实现方式,补间动画则是通过特定算法在两个关键帧之间补充渐变的动画效果来实现的。补间动画的优点是可以节省空间。
这里写图片描述

补间动画如下:

<set xmlns:android="http://schemas.android.com/apk/res/android">    <alpha        android:duration="1000"        android:fromAlpha="0.0"        android:toAlpha="1.0" />    <!--     透明度控制动画效果 alpha        浮点型值:            fromAlpha 属性为动画起始时透明度            toAlpha   属性为动画结束时透明度            说明:                0.0表示完全透明                1.0表示完全不透明            以上值取0.0-1.0之间的float数据类型的数字        长整型值:            duration  属性为动画持续时间            说明:                时间以毫秒为单位    --></set>
 <rotate        android:duration="3000"        android:fromDegrees="0"        android:interpolator="@android:anim/accelerate_decelerate_interpolator"        android:pivotX="50%"        android:pivotY="50%"        android:toDegrees="+180"        />    <!--     rotate 旋转动画效果       属性:interpolator 指定一个动画的插入器             在我试验过程中,使用android.res.anim中的资源时候发现             有三种动画插入器:                accelerate_decelerate_interpolator   加速-减速 动画插入器                accelerate_interpolator               加速-动画插入器                decelerate_interpolator               减速- 动画插入器             其他的属于特定的动画效果       浮点数型值:            fromDegrees 属性为动画起始时物件的角度            toDegrees   属性为动画结束时物件旋转的角度 可以大于360度            说明:                     当角度为负数——表示逆时针旋转                     当角度为正数——表示顺时针旋转                     (负数from——to正数:顺时针旋转)                     (负数from——to负数:逆时针旋转)                     (正数from——to正数:顺时针旋转)                     (正数from——to负数:逆时针旋转)            pivotX     属性为动画相对于物件的X坐标的开始位置            pivotY     属性为动画相对于物件的Y坐标的开始位置            说明:        以上两个属性值 从0%-100%中取值                         50%为物件的X或Y方向坐标上的中点位置        长整型值:            duration  属性为动画持续时间            说明:       时间以毫秒为单位    -->
<set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/accelerate_decelerate_interpolator"    android:fillAfter="true">    <scale        android:duration="1000"        android:fillAfter="false"        android:fromXScale="0.0"        android:fromYScale="0.0"        android:pivotX="50%"        android:pivotY="50%"        android:toXScale="1.4"        android:toYScale="1.4" /><!--     尺寸伸缩动画效果 scale       属性:interpolator 指定一个动画的插入器        在我试验过程中,使用android.res.anim中的资源时候发现        有三种动画插入器:            accelerate_decelerate_interpolator  加速-减速 动画插入器            accelerate_interpolator        加速-动画插入器            decelerate_interpolator        减速- 动画插入器        其他的属于特定的动画效果   AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值  BounceInterpolator   动画结束的时候弹起  CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线  DecelerateInterpolator 在动画开始的地方快然后慢  LinearInterpolator   以常量速率改变  OvershootInterpolator    向前甩一定值后再回到原来位置      浮点型值:            fromXScale 属性为动画起始时 X坐标上的伸缩尺寸            toXScale   属性为动画结束时 X坐标上的伸缩尺寸            fromYScale 属性为动画起始时Y坐标上的伸缩尺寸            toYScale   属性为动画结束时Y坐标上的伸缩尺寸            说明:                 以上四种属性值                    0.0表示收缩到没有                    1.0表示正常无伸缩                    值小于1.0表示收缩                    值大于1.0表示放大            pivotX     属性为动画相对于物件的X坐标的开始位置            pivotY     属性为动画相对于物件的Y坐标的开始位置            说明:                    以上两个属性值 从0%-100%中取值                    50%为物件的X或Y方向坐标上的中点位置        长整型值:            duration  属性为动画持续时间            说明:   时间以毫秒为单位        布尔型值:            fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用--></set>
<set xmlns:android="http://schemas.android.com/apk/res/android"    android:fillAfter="true">    <translate        android:duration="2000"        android:fromXDelta="30"        android:fromYDelta="30"        android:toXDelta="-80"        android:toYDelta="300" />    <!--     translate 位置转移动画效果        整型值:            fromXDelta 属性为动画起始时 X坐标上的位置            toXDelta   属性为动画结束时 X坐标上的位置            fromYDelta 属性为动画起始时 Y坐标上的位置            toYDelta   属性为动画结束时 Y坐标上的位置            注意:                     没有指定fromXType toXType fromYType toYType 时候,                     默认是以自己为相对参照物        长整型值:            duration  属性为动画持续时间            说明:   时间以毫秒为单位    --></set>

我想大家看了这些例子已经领会了很多了,下面我们讲讲AnimationSet

AnimationSet

这个是一种动画分组的,

android:shareInterpolator="true"   //是否共享Interpolator   android:interpolator="@android:anim/accelerate_decelerate_interpolator"    //interpolator  加减速控制    android:duration="3000"   //该组动画时间    android:fillAfter="false" //是否停留在最后一帧动画    //这里还有一个操作叫fillbefore  ,是否停留在开始一帧

set的例子如下

<set xmlns:android="http://schemas.android.com/apk/res/android">    <scale        android:interpolator="@android:anim/accelerate_decelerate_interpolator"        android:fromXScale="1.0"        android:toXScale="1.4"        android:fromYScale="1.0"        android:toYScale="0.6"        android:pivotX="50%"        android:pivotY="50%"        android:fillAfter="false"        android:duration="700" />    <set        android:interpolator="@android:anim/accelerate_interpolator"        android:startOffset="700">        <scale            android:fromXScale="1.4"            android:toXScale="0.0"            android:fromYScale="0.6"            android:toYScale="0.0"            android:pivotX="50%"            android:pivotY="50%"            android:duration="400" />        <rotate            android:fromDegrees="0"            android:toDegrees="-45"            android:toYScale="0.0"            android:pivotX="50%"            android:pivotY="50%"            android:duration="400" />    </set></set>//此处为两个动画组。

以上五种类型分别的使用方法如下:

ImageView image = (ImageView) findViewById(R.id.imageview);        Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);        image.startAnimation(hyperspaceJump);

对应的xml类型有android 的java代码的使用方法

 // TODO Auto-generated method stub                // 1&2: 确定起始状态,结束状态                TranslateAnimation tAnim = new TranslateAnimation(0, 400, 0, 0);//横向位移400个单位                RotateAnimation rAnima = new RotateAnimation(0, 70);//顺时针旋转70度                ScaleAnimation sAnima = new ScaleAnimation(0, 5, 0, 5);//横向放大5倍,纵向放大5倍                AlphaAnimation aAnima = new AlphaAnimation(1.0f, 0.0f);//从全不透明变为全透明                // 3: 确定持续时间                tAnim.setDuration(2000);                rAnima.setDuration(2000);                sAnima.setDuration(2000);                aAnima.setDuration(2000);                // 4: 确定Interpolator                tAnim.setInterpolator(new AccelerateDecelerateInterpolator());                // 启动动画                translation.startAnimation(tAnim);                rotate.startAnimation(rAnima);                scale.startAnimation(sAnima);                alpha.startAnimation(aAnima);
0 0
原创粉丝点击