android 动画


动画分类和动画原理

  • View Animation
    • 补间动画Tween Animation :旋转、渐变、移动、缩放,使用Matrix的计算中间路径的效果
    • 逐帧动画Frame Animation[Drawable Animation]:顺序播放事先做好的图像,是一种画面转换动画
  • Property Animation 属性动画
    • 单个绘制过程【animateValue()】为:计算出当前进度((currentTime - mStartTime) / mDuration),将所得值交给插值器计算得出新的进度值,evaluator(估值算法)根据新的进度值计算出当前进度的属性动画的值,通过反射机制进行设置
    • 判断是否完成,重复单个绘制过程

插值器Interolator

名称属性
AccelerateDecelerateInterolator先加速后减速,开始结束时慢,中间加速
AccelerateInterpolator加速,开始时慢中间加速
DecelerateInterpolator减速,开始时快然后减速
AnticipateInterpolator反向 ,先向相反方向改变1段再加速播放
AnticipateOvershootInterpolator反向加超出,先向相反方向改变,再加速播放,会超越目的值然后缓慢移动至目的值
BounceInterpolator跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能顺次为85,77,70,80,90,100
CycleIinterpolator循环,动画循环1定次数,值的改变成1正弦函数:Math.sin(2 * mCycles * Math.PI * input)
LinearInterpolator线性,线性均匀改变
OvershottInterpolator超出,最后超越目的值然后缓慢改变到目的值
TimeInterpolator1个接口,允许你自定义interpolator,以上几个都是实现了这个接口

补间动画写法

XMLCodeJavaCode注释
alphaAlphaAnimation渐变动画效果
scaleScaleAnimation渐变尺寸伸缩动画效果
translateTranslateAnimation画面转换位置移动动画效果
rotateRotateAnimation画面转移旋转动画效果
类型Code注释单位
公共android:shareInterpolator是否共享插入器共享时,四个子节点都用一个插入器
公共android:interpolator指定一个动画的插入器使用系统资源
公共android:fillEnabled当设置为true时,fillAfter和fill, Befroe将会都为true,此时会忽略fillBefore 和fillAfter两种属性
公共android:fillAfter该动画转化是否在动画结束后被应用boolean
公共android:fillBefore该动画转化是否在动画开始前被应用boolean
公共android:repeatMode重复模式“restart” 或者 “reverse”
公共android:repeatCount重复次数integer
公共android:duration动画持续时间integer 时间以毫秒为单位
公共android:startOffset动画时间间隔long
公共android:zAdjustment定义动画z order的变换[normal] or [top] or [bottom]
渐变android:fromAlpha动画起始时透明度(浮点型)0.0表示完全透明 1.0表示完全不透明
渐变android:toAlpha属性为动画结束时透明度(浮点型)
尺寸android:fromXScale动画起始时 X坐标上的伸缩尺寸(浮点型)
尺寸android:toXScale动画结束时 X坐标上的伸缩尺寸(浮点型)
尺寸android:fromYScale动画起始时Y坐标上的伸缩尺寸(浮点型)
尺寸android:toYScale动画结束时 Y坐标上的伸缩尺寸(浮点型)
尺寸android:pivotX动画相对于物件的X坐标的开始位置从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
尺寸android:pivotY动画相对于物件的Y坐标的开始位置从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
移动android:fromXDelta属性为动画起始时 X坐标上的位置(整型)
移动android:fromYDelta属性为动画起始时 Y坐标上的位置(整型)
移动android:toXDelta动画结束时 X坐标上的位置(整型)
移动android:toYDelta动画结束时 Y坐标上的位置(整型)
旋转android:fromDegrees动画起始时物件的角度(整型)
旋转android:toDegrees动画结束时物件旋转的角度 可以大于360度(整型)当角度为负数——表示逆时针旋转;当角度为正数——表示顺时针旋转
旋转android:pivotX动画相对于物件的X坐标的开始位置从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
旋转android:pivotY动画相对于物件的Y坐标的开始位置从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
示例代码
<alpha
  android:duration="1000"
  android:fromAlpha="0.0"
  android:toAlpha="1.0" >
</alpha>

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

<translate
  android:duration="2000"
  android:fromXDelta="30"
  android:fromYDelta="30"
  android:toXDelta="-80"
  android:toYDelta="300" >
</translate>

<rotate
  android:duration="3000"
  android:fromDegrees="0"
  android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  android:pivotX="50%"
  android:pivotY="50%"
  android:toDegrees="+350" >
</rotate>

属性动画写法

名称属性备注
android:ordering子动画启动方式sequentially:动画按照先后顺序 together (default) :动画同时启动
android:propertyName执行动画的属性alpha,backgroundColor等
android:duration动画执行时间eg:1000
android:valueFrom起始状态float、int、color
android:valueTo终止状态float、int、color
android:valueType关键参数[“intType”,”floatType”]
android:repeatCount重复次数”-1“表示无限循环,”1“表示动画在第一次执行完成后重复执行一次,也就是两次,默认为0,不重复执行
android:repeatMode重复模式“reverse”会使得按照动画向相反的方向执行,可实现类似钟摆效果。“repeat”会使得动画每次都从头开始循环
示例代码
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();
<set
  android:ordering=["together" | "sequentially"]>

  <objectAnimator
    android:propertyName="string"
    android:duration="int"
    android:valueFrom="float | int | color"
    android:valueTo="float | int | color"
    android:startOffset="int"
    android:repeatCount="int"
    android:repeatMode=["repeat" | "reverse"]
    android:valueType=["intType" | "floatType"]>
  </objectAnimator>

  <animator
    android:duration="int"
    android:valueFrom="float | int | color"
    android:valueTo="float | int | color"
    android:startOffset="int"
    android:repeatCount="int"
    android:repeatMode=["repeat" | "reverse"]
    android:valueType=["intType" | "floatType"]/>

    <set>
      ...
    </set>
  </set>

ViewPropertyAnimator

可以更加简单的给View添加动画
view.animate().translationX(100f).translationY(100f).scaleX(2.0f).scaleY(2.0f).withLayer()
+ withStartAction 动画开始
+ withEndAction 动画结束

Layout animation 布局动画

<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:delay="30%"
    android:animationOrder="reverse"
    android:animation="@anim/slide_right"/>

android:delay表示动画播放的延时,既可以是百分比,也可以是float小数。
android:animationOrder表示动画的播放顺序,有三个取值normal(顺序)、reverse(反序)、random(随机)。
android:animation指向了子控件所要播放的动画。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值