Android 动画之视图动画

相关文章
Android 动画之视图动画
Android 动画之插值器
Android 动画之属性动画ValueAnimator
Android 动画之属性动画ObjectAnimator
Android 动画之集合动画AnimatorSet
Android 动画之布局动画

View animation(视图动画)

视图动画分两种子动画Tween animation和Frame animation,下面分别介绍他们的用法。


Tween animation(补间动画)

实现view的alpha(透明度)、scale(缩放)、translate(平移)、rotate(旋转)等动画效果。

文件保存路径:

res/anim/filename.xml

语法:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

例子:

res/anim/set_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <scale
        android:duration="700"
        android:fillAfter="false"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.4"
        android:toYScale="0.6" />

    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700" >
        <scale
            android:duration="400"
            android:fromXScale="1.4"
            android:fromYScale="0.6"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="0.0"
            android:toYScale="0.0" />

        <rotate
            android:duration="400"
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="-45"
            android:toYScale="0.0" />
    </set>

</set>

res/anim/scale_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fillEnabled="true"
    android:fromXScale="0"
    android:fromYScale="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1"
    android:toYScale="1" />

这里只列出scale的使用方法了,alpha、rotate、translate的使用是大同小异的,所以就不一一列出了。还有它们一一对应的类分别为:
AlphaAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation、AnimationSet。

代码中的应用:

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

效果:

这里写图片描述


Frame animation(帧动画)

顾名思义就是一张一张的播放图片,到达动画的效果。

文件保存路径:

res/drawable/filename.xml

语法:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>

例子:

res/drawable/frame_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/list_add"
        android:duration="1000"/>
    <item
        android:drawable="@drawable/list_delete"
        android:duration="1000"/>
    <item
        android:drawable="@drawable/list_sync"
        android:duration="1000"/>

</animation-list>

代码中的应用:

view.setBackgroundResource(R.drawable.frame_anim);
AnimationDrawable animation = (AnimationDrawable) view.getBackground();
animation.start();

帧动画要注意的地方就是oneshot属性了,oneshot=”true”就是只执行一遍动画,oneshot=”false”就是循环播放动画。

效果:

这里写图片描述


Animation各属性的意义

属性解释
fromXScale动画开始时X轴的缩放比例
toXScale动画结束时X轴的缩放比例
fromYScale动画开始时Y轴的缩放比例
toYScale动画结束时Y轴的缩放比例
fromDegrees动画开始时的旋转角度,正值为顺时针,负值为逆时针
toDegrees动画结束时的旋转角度,正值为顺时针,负值为逆时针
fromAlpha动画开始时的透明度,0.0为全透明,1.0为完全不透明
toAlpha动画结束时的透明度,0.0为全透明,1.0为完全不透明
pivotX动画起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
pivotY动画起点Y轴坐标,取值及意义跟android:pivotX一样
fromXDelta取值及意义跟android:pivotX一样
toXDelta取值及意义跟android:pivotX一样
fromYDelta取值及意义跟android:pivotX一样
toYDelta取值及意义跟android:pivotX一样
fillAfter如果设置为true,控件动画结束时,将保持动画最后时的状态
fillBefore如果设置为true,控件动画结束时,还原到开始动画前的状态
fillEnabled与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
repeatCount重复次数,如果为infinite或者-1就表示无限循环
repeatMode重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
startOffset延时多少毫秒后,开始播放动画
interpolator插值器,影响的动画的执行效果
detachWallpaper是否在壁纸上运行
duration动画持续时间
zAdjustment表示被设置动画的内容运行时在Z轴上的位置(top/bottom/normal),默认为normal

这里需要特别注意的就是pivotX、pivotY、fromXDelta、toXDelta、fromYDelta、toYDelta这六种属性了,知道了它们的意义后,我们就不再会被50,50%,50%p这样的值疑惑了。interpolator这个属性,将用一个新的文章,专门来讲解。

源代码


参考文章

Animation Resources
自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法
自定义控件三部曲之动画篇(二)——Interpolator插值器
自定义控件三部曲之动画篇(三)—— 代码生成alpha、scale、translate、rotate、set及插值器动画

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值