Kotlin扩展简化Android动画开发

1. 基础 View 动画扩展

为 View 添加常用动画的快捷方法

kotlin 复制代码
// 淡出动画
fun View.fadeOut(duration: Long = 300) {
    animate()
        .alpha(0f)
        .setDuration(duration)
        .setInterpolator(AccelerateInterpolator())
        .start()
}

// 使用示例
view.fadeOut() // 默认 300ms
view.fadeOut(500) // 自定义时长

2. 链式动画扩展

支持属性组合的流畅写法

kotlin 复制代码
fun View.animateProperties(
    duration: Long = 300,
    action: View.() -> Unit
) {
    animate()
        .setDuration(duration)
        .withLayer()
        .withAction { action() }
        .start()
}

// 使用示例
view.animateProperties(500) {
    translationX(100f)
    scaleX(1.5f)
    rotation(45f)
}

3. 动画监听简化

用高阶函数简化监听器

kotlin 复制代码
fun ViewPropertyAnimator.onComplete(action: () -> Unit) {
    setListener(object : AnimatorListenerAdapter() {
        override fun onAnimationEnd(animation: Animator) {
            action()
        }
    })
}

// 使用示例
view.animate()
    .alpha(0f)
    .setDuration(300)
    .onComplete { 
        view.visibility = View.GONE
    }

4. ValueAnimator 扩展

封装通用数值动画

kotlin 复制代码
fun ValueAnimator.customAnimator(
    vararg values: Any,
    duration: Long = 300,
    interpolator: Interpolator = AccelerateDecelerateInterpolator(),
    update: (ValueAnimator) -> Unit
) {
    setObjectValues(*values)
    setDuration(duration)
    setInterpolator(interpolator)
    addUpdateListener { update(it) }
    start()
}

// 使用示例
ValueAnimator().customAnimator(0f, 360f) { anim ->
    val value = anim.animatedValue as Float
    view.rotation = value
}

5. 动画集合扩展

简化动画序列组合

kotlin 复制代码
fun AnimatorSet.playSequentially(vararg animators: Animator.() -> Unit) {
    val list = animators.map {
        AnimatorSet().apply { it() }
    }
    playSequentially(list)
}

// 使用示例
AnimatorSet().playSequentially(
    { view.animate().alpha(0f) },
    { view.animate().translationY(100f) },
    { view.animate().rotation(90f) }
).start()

6. 综合使用示例

kotlin 复制代码
// 实现一个组合动画效果
fun View.bounceHide() {
    animateProperties(duration = 400) {
        scaleX(0.8f)
        scaleY(0.8f)
        alpha(0.5f)
    }.onComplete {
        animateProperties(300) {
            scaleX(1f)
            scaleY(1f)
            alpha(0f)
        }.onComplete {
            visibility = View.GONE
        }
    }
}

最佳实践建议:

  1. 将扩展函数统一放在 AnimationExtensions.kt 文件中
  2. 使用 @JvmOverloads 注解支持 Java 调用
  3. 为常用插值器创建预置参数
  4. 结合协程实现更复杂的动画序列
  5. 使用 withLayer() 提升动画性能

通过合理使用 Kotlin Extensions,可以让动画代码:

  • 减少 40%-60% 的样板代码
  • 提高可读性和维护性
  • 保持原生动画 API 的灵活性
  • 方便团队统一动画风格

这种模式特别适合需要频繁实现复杂动效的 UI 密集型应用开发。

相关推荐
暖木生晖9 分钟前
Javascript函数之匿名函数以及立即执行函数的使用方法?
开发语言·javascript·ecmascript
say_fall18 分钟前
C语言容易被忽略的易错点(2)
c语言·开发语言
syker28 分钟前
NEWBASIC 2.06.7 API 帮助与用户使用手册
开发语言·人工智能·机器学习·自动化
Js_cold28 分钟前
Verilog运算符
开发语言·fpga开发·verilog
努力还债的学术吗喽44 分钟前
【项目】pyqt5基于python的照片整蛊项目
开发语言·python·qt
m0_569531011 小时前
shell(4)--shell脚本中的循环:(if循环,for,while,until)和退出循环(continue,break, exit)
开发语言
星释1 小时前
Rust 练习册 :掌握文本处理与词频统计
开发语言·后端·rust
火龙谷1 小时前
DrissionPage遇到iframe
开发语言·前端·javascript
aaajj1 小时前
android contentprovider及其查看
android
HalvmånEver1 小时前
Linux的第二章 : 基础的指令(二)
linux·运维·服务器·开发语言·学习