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 密集型应用开发。

相关推荐
iCxhust5 小时前
c# U盘映像生成工具
开发语言·单片机·c#
yangzhi_emo6 小时前
ES6笔记2
开发语言·前端·javascript
花花鱼6 小时前
android studio 设置让开发更加的方便,比如可以查看变量的类型,参数的名称等等
android·ide·android studio
emplace_back7 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
jz_ddk7 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶7 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
xiaolang_8616_wjl7 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
收破烂的小熊猫~7 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
nananaij8 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm