第七章 Android动画

作者: ByteStefan | 来源:发表于2019-01-15 23:19 被阅读0次
  1. View 动画
    建议在 res/anim 中创建 XML 格式的动画。
<set
    //动画集合插值器
    android:interpolator = "@[package:]anim/interpolator_resource"
    //集合中的动画是否和集合共享一个插值器
    android:shareInterpolator = ["true" | "false"]
    //动画持续时间
    android:duration = "integer"
    //动画结束以后是否停留在结束位置
    android:fillAfter = ["true" | "false"]
    //允许在动画播放期间,调整播放内容的Z轴方向的顺序
    //normal 正在播放的动画内容保持当前的 Z 轴顺序;top 在动画播放期间,强制将动画内容放到其他内容上面;bottom 在动画播放期间,强制将动画内容放在其他内下面
    andoird:zAdjustment = ["normal" | "top" | "bottom"]>
    //透明度动画 对应 AlphaAnimation 类
    <alpha
        //透明度起始值和结束值
        android:fromAlpha = "float"
        android:toAlpha = "float"/>
    // 缩放动画 对应 ScaleAnimation 类
   <scale
       //水平缩放起始值和结束值
       android:fromXScale = "float"
       android:toXScale = "float"
       //竖直缩放起始值和结束值
       android:fromYScale = "float"
       android:toYScale = "float"  
       //缩放的轴点 x 坐标和 y 坐标,默认轴点是 View 的中心点
       android:pivotX = "float"
       android:pivotY = "float"/>  
   //平移动画 对应 TranslateAnimation 类
   <translate
       //水平移动起始值与结束值
       android:fromXDelta = "float"
       android:toXDelta = "float"
       //竖直移动起始值与结束值
       android:fromYDelta= "float"
       android:toYDelta = "float"/>
   //旋转动画 对应 RotateAnimation 类
   <rotate
       //旋转开始角度与结束角度
       android:fromDegrees = "float"
       android:toDegrees = "float"
       //旋转轴心 x 坐标与 y 坐标
       android:pivotX = "float"
       android:pivotY = "float"/>
   //支持一系列动画
   <set> .... </set>
</set>   

使用:

val animation = AnimationUtils.loadAnimation(this,R.anim.animatin_test)
btn.startAnimation(animation)
  1. 帧动画
<animation-list
    android:oneshot = "false">
    <item android:drawable = "@drawable/image" android:duration = "integer"/>
    ....
</animation-list>    

使用:

btn.backgroundResource = R.drawable.frame_animation
(btn.background as AnimationDrawable).start()
  1. LayoutAnimation
    为 ViewGroup 指定一个其子元素出场动画。
<layoutAnimation
    //动画延迟时间,根据动画周期进行计算
    android:delay = "float"
    //动画顺序 normal 顺序,reverse 逆序,random 随机
    android:animationOrder = ["normal" | "reverse" | "random"]
    //子元素动画
    android:animation = @anim/anim_item/>

使用:

<ListView
    android:id = "@+id/list"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:layoutAnimation = "@anim/anim_layout"
    ..../>
  1. Activity 和 Fragment 的切换效果
    通过 overridePendingTransition( int enterAnim,int exitAnim) 方法,该方法必须在 startActivity(intent) 或 finish() 之后调用才有效。enterAnim 指 Activity 入场(打开)动画,exitAnim 指 Activity 出场(退出)动画。
    V4包 Fragment 可通过 FragmentTransaction 中的 setCustomAnimations() 方法添加切换动画。

  2. 属性动画
    ValueAnimator、ObjectAnimator、AnimatorSet
    使用:

ObjectAnimator.ofFloat(myView,"translationY",-myView.height).start()

val bgcolorAnim = ObjectAnimator.ofInt(this,"backgroundColor",000000,ffffff)
bgcolorAnim.duration = 3000
bgcolorAnim.evaluator = ArgEvaluator()
bgcolorAnim.repeatCount = ValueAnimator.INFINITE
bgcolorAnim.repeatMode = ValueAnimator.REVERSE
bgcolorAnim.start()

val animSet = AnimatorSet()
animSet.playTogether(
    ObjectAnimator.ofFloat(myView,"translationX",0,90)
    ObjectAnimator.ofFloat(myView,"translationY",0,90)
)
animSet.duration = 5*1000
animSet.start()

XML格式

<set
    //动画集合播放方式  together 同时播放,sequentially 顺序播放
    android:ordering = ["together" | "sequentially"]>
    <objectAnimator
        //动画作用对象的属性名称
        android:propertyNamer = "string"
        //动画时长
        android:duration = "int"
        //属性起始值
       android:valueFrom = ["float" | "int" | "color"]
       //属性结束值 
       android:valueTo = ["float" | "int" | "color"]
       //动画延迟时间 
       android:startOffset = "int"
       //动画重复次数 默认为0,-1表示无限循环
       android:repeatCount = "int"
       //动画重复模式 restart 连续重复,reverse 逆向重复
       android:repeatMode = ["restart" | "reverse"]
       //表示 android:propertyNamer 所指定的属性类型,intType 整型,floatType 浮点型,如果 android:propertyNamer 指定属性为颜色,则不需要指定该属性
       android:valueType = ["intType" | "floatType"]/>
    <animator
        android:duration = "int"
        android:valueFrom = ["float" | "int" | "color"] 
        android:valueTo = ["float" | "int" | "color"]
        android:startOffset = "int"
        android:repeatCount = "int"
        android:repeatMode = ["restart" | "reverse"]
        android:valueType = ["intType" | "floatType"]/>
    <set> ..... </set>    
</set>    
  1. 属性动画监听
    AnimatorListener、AnimatorUpdateListener

  2. 对任意属性做动画
    属性动画原理:属性动画要求动画作用的对象提供该属性的 get 和 set 方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去调用 set 方法,随着时间的推移,所传递的值越来越接近最终值。
    如果属性没有 get 和 set 方法,可通过以下方式:
    ① 如果有权限给 属性 添加 set 和 get 方法;
    ② 用一个类来包装原始对象,间接提供 get 和 set 方法;
    ③ 采用 ValueAnimator 监听动画过程,手动改变属性;(ps:ValueAnimator 本身不作用于任何对象,即使用它没有任何动画效果,需监听动画过程,手动修改属性值)

相关文章

网友评论

    本文标题:第七章 Android动画

    本文链接:https://www.haomeiwen.com/subject/huaudqtx.html