相关文章
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及插值器动画