Animation 补间动画

补间动画:有起始状态和终止状态(只是一个动画效果 视觉效果 没有真正改变控件的属性)

适用情况:需要实现简单的基本动画效果,或者需要快速实现视图的基本动画效果。

补间动画

补间动画(TweenAnimaion)四种常用实现:

  1. AlphaAnimation (透明动画)
  • fromAlpha:动画开始时视图的透明度(取值范围: -1 ~ 1)
  • toAlpha:动画结束时视图的透明度(取值范围: -1 ~ 1)
  1. RotateAnimation (旋转动画)
  • fromDegrees :动画开始时 视图的旋转角度(正数 = 顺时针,负数 = 逆时针)
  • toDegrees :动画结束时 视图的旋转角度(正数 = 顺时针,负数 = 逆时针)
  • pivotXType :旋转轴点的x坐标的模式
  • pivotXValue :旋转轴点x坐标的相对值
  • pivotYType :旋转轴点的y坐标的模式
  • pivotYValue :旋转轴点y坐标的相对值

pivotXType = Animation.ABSOLUTE:旋转轴点的x坐标= View左上角的原点 在x方向 加上 pivotXValue 数值的点(y方向同理)
pivotXType = Animation.RELATIVE_TO_SELF:旋转轴点的x坐标= View左上角的原点在x方向加上自身宽度乘上pivotXValue数值的值(y方向同理)
pivotXType = Animation.RELATIVE_TO_PARENT:旋转轴点的x坐= View左上角的原点在x方向加 父控件宽度乘上pivotXValue数值的值 (y方向同理)

  1. ScaleAnimation (缩放动画)
    参数:
  • fromX :动画在水平方向X的起始缩放倍数
  • toX :动画在水平方向X的结束缩放倍数
  • fromY :动画开始前在竖直方向Y的起始缩放倍数
  • toY:动画在竖直方向Y的结束缩放倍数
  • pivotXType:缩放轴点的x坐标的模式
  • pivotXValue:缩放轴点x坐标的相对值
  • pivotYType:缩放轴点的y坐标的模式
  • pivotYValue:缩放轴点y坐标的相对值

pivotXType = Animation.ABSOLUTE:缩放轴点的x坐标 = View左上角的原点 在x方向 加上 pivotXValue 数值的点(y方向同理)
pivotXType = Animation.RELATIVE_TO_SELF:缩放轴点的x坐标=View左上角的原点 在x方向加上自身宽度乘上 pivotXValue 数值的值(y方向同理)
pivotXType = Animation.RELATIVE_TO_PARENT:缩放轴点的x坐标=View左上角的原点 在x方向加上父控件宽度乘上 pivotXValue 数值的值 (y方向同理)

  1. TranslateAnimation (平移动画)
  • fromXDelta :视图在水平方向x 移动的起始值
  • toXDelta :视图在水平方向x 移动的结束值
  • fromYDelta :视图在竖直方向y 移动的起始值
  • toYDelta:视图在竖直方向y 移动的结束值

动画的同一属性
以下参数是4种动画效果的公共属性,即都有的属性(即可写在set中也可以在自己的属性中写)
android:duration=”3000” // 动画持续时间(ms),必须设置,动画才有效果
android:startOffset =”1000” // 动画延迟开始时间(ms)
android:fillBefore = “true” // 动画播放完后,视图是否会停留在动画开始的状态,默认为true
android:fillAfter = “false” // 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
android:fillEnabled= “true” // 是否应用fillBefore值,对fillAfter值无影响,默认为true
android:repeatMode= “restart” // 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart
android:repeatCount = “0” // 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复
android:interpolator = @[package:]anim/interpolator_resource // 插值器,即影响动画的播放速度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
fun slideOutToTopAnimation(onEnd:()->Unit = {}):Animation{
return TranslateAnimation(
Animation.RELATIVE_TO_SELF,
fromXValue: 0f,
Animation.RELATIVE_TO_SELF,
toXValue: 0f,
Animation.RELATIVE_TO_SELF,
fromYValue: 0f,
Animation.RELATIVE_TO_SELF,
toYValue: -1f
).apply { this: TranslateAnimation
duration = 200
setAnimationListener(Object:Animation.AnimationListener{
override fun onAnimationStart(animation: Animation?){

}
override fun onAnimationEnd(animation: Animation?){
onEnd()
}
override fun onAnimationRepeat(animation: Animation?){

}
})
}
}

1.AnimationSet(代码定义)

在Android中,AnimationSet是一个用于组合多个动画效果的类。通过AnimationSet,可以将多个动画效果按照一定的顺序或同时播放。
AnimationSet可以包含多个Animation对象,每个Animation对象可以是AlphaAnimation(透明度动画)、ScaleAnimation(缩放动画)、TranslateAnimation(位移动画)或RotateAnimation(旋转动画)等。

以下是AnimationSet的常用方法及其作用:

  1. addAnimation(animation: Animation):向AnimationSet中添加动画效果。
  2. setDuration(durationMillis: Long):设置动画的持续时间,单位为毫秒。
  3. setFillAfter(fillAfter: Boolean):设置动画结束后是否保持最后的状态。
  4. setFillBefore(fillBefore: Boolean):设置动画开始前是否使用起始状态。
  5. setInterpolator(interpolator: Interpolator):设置动画的插值器,用于控制动画的变化速率。
  6. setRepeatCount(repeatCount: Int):设置动画的重复次数,可以是一个正整数或Animation.INFINITE。
  7. setStartOffset(offsetMillis: Long):设置动画开始之前的延迟时间,单位为毫秒。
  8. setStartTime(startTimeMillis: Long):设置动画开始的时间,单位为毫秒。
  9. initialize(width: Int, height: Int, parentWidth: Int, parentHeight: Int):初始化动画的尺寸信息,通常在动画开始前调用。

下面是一个使用Kotlin语言创建 AnimationSet 并添加动画的示例:

1
2
3
4
5
6
7
8
9
10
11
val animationSet = AnimationSet(true).apply {
addAnimation(AlphaAnimation(0.0f, 1.0f).apply {
duration = 1000
})

addAnimation(ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f).apply {
duration = 1000
})
}

view.startAnimation(animationSet)

在这个示例中,我们创建了一个包含透明度动画和缩放动画的AnimationSet,并将其应用到一个View上。

AnimationSet 类中常用的属性有:

  1. animations :用于存储AnimationSet中包含的动画效果列表。
  2. duration :动画的持续时间,单位为毫秒。
  3. fillAfter :动画结束后是否保持最后的状态。
  4. fillBefore:动画开始前是否使用起始状态。
  5. interpolator :动画的插值器,用于控制动画的变化速率。
  6. repeatCount :动画的重复次数,可以是一个正整数或Animation.INFINITE。
  7. startOffset :动画开始之前的延迟时间,单位为毫秒。
  8. startTime :动画开始的时间,单位为毫秒。

2.从 anim 资源中加载动画资源(xml创建)

fillAfter :动画结束后是否保持最终状态

AnimationUtils.loadAnimation 是一个用于从资源文件中加载动画资源的静态方法。
它会解析并加载指定的资源文件,并返回一个 Animation 对象,该对象表示了加载的动画资源。
通过调用此方法,可以在Android应用程序中直接使用 XML 定义的动画资源,而无需手动创建和配置动画对象。

例如,可以通过调用AnimationUtils.loadAnimation方法从res/anim文件夹中加载一个定义好的动画资源,并将其应用于一个View对象:

1
2
3
4
5
6
7
8
Object IndicatorAnimation{
fun startAnimation(target:View){
AnimationUtils.loadAnimation(target.context, R.anim.fade_in).apply{
fillAfter = true
target.startAnimation(this)
}
}
}

在上述示例中,loadAnimation方法加载了res/anim文件夹中的fade_in.xml动画资源,并将其应用于名为view的View对象,使其显示一个淡入的动画效果。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2025 Annie
  • Visitors: | Views:

嘿嘿 请我吃小蛋糕吧~

支付宝
微信