- 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)
- 帧动画
<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()
- 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"
..../>
-
Activity 和 Fragment 的切换效果
通过 overridePendingTransition( int enterAnim,int exitAnim) 方法,该方法必须在 startActivity(intent) 或 finish() 之后调用才有效。enterAnim 指 Activity 入场(打开)动画,exitAnim 指 Activity 出场(退出)动画。
V4包 Fragment 可通过 FragmentTransaction 中的 setCustomAnimations() 方法添加切换动画。 -
属性动画
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>
-
属性动画监听
AnimatorListener、AnimatorUpdateListener -
对任意属性做动画
属性动画原理:属性动画要求动画作用的对象提供该属性的 get 和 set 方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去调用 set 方法,随着时间的推移,所传递的值越来越接近最终值。
如果属性没有 get 和 set 方法,可通过以下方式:
① 如果有权限给 属性 添加 set 和 get 方法;
② 用一个类来包装原始对象,间接提供 get 和 set 方法;
③ 采用 ValueAnimator 监听动画过程,手动改变属性;(ps:ValueAnimator 本身不作用于任何对象,即使用它没有任何动画效果,需监听动画过程,手动修改属性值)
网友评论