DSLAnimator

这是一个能让你在Kotlin下使用DSL的方式快速优雅的写Android动画的工具。
该项目是一个使用Kotlin的lambda表达式与扩展函数特性封装的DSL工具,如果你有一定的Kotlin基础,并且喜欢DSL的优雅,那么这个项目会是一个不错的学习对象。

一、它能做什么?

我们在写项目的时候,必不可少的需要经常为组件加上一些过渡动画,让其在与用户交互的时候可以更生动而不会显得乏味脱节。那么DSLAnimator能做的就是让你在写动画的时候逻辑更简单清晰,而不至于让大量的动画代码去混淆了其它业务内容的阅读体验。差不多就是我们把XML配置动画的方式搬到了Kotlin代码中,并且使用过程更加一体化。 DSLAnimator的唯一特点就是它让Android动画的开发变得更简单更清晰。

使用对比

传统写法

上图的动画让一个按钮的宽高变大,同时有一个颜色的渐变动画,在我们平时用属性动画应该是下面这么写。

val width = ValueAnimator.ofInt(mButton.width, 500)
val widthParams = mButton.layoutParams
width.addUpdateListener {widthParams.width = it.animatedValue as IntmButton.layoutParams = widthParams
}val height = ValueAnimator.ofInt(mButton.height, 500)
val heightParams = mButton.layoutParamsheight.addUpdateListener {heightParams.height = it.animatedValue as IntmButton.layoutParams = heightParams
}val color = ValueAnimator.ofFloat(0f, 1f)
color.addUpdateListener {val value = it.animatedValue as Floatval color = ArgbEvaluator().evaluate(value,Color.parseColor("#636978"),Color.parseColor("#1AD372")) as IntmButton.setBackgroundColor(color)
}val set = AnimatorSet()
set.playTogether(width, height, color)
set.duration = 500
set.interpolator = OvershootInterpolator()
set.start()复制代码
使用DSL

而使用了DSL的话,可以看到代码明显大量减少,并且逻辑更加清晰易懂。

animSet {widthAnim {target = mButtonvalues = intArrayOf(mButton.width, 500)}heightAnim {target = mButtonvalues = intArrayOf(mButton.height, 500)}colorAnim {target = mButtonstartColor = "#636978"endColor = "#1AD372"}duration = 500interpolator = OvershootInterpolator()
}.start()复制代码

二、怎么使用?

请移步项目主页查看详细使用方式
github.com/550609334/D…

1、支持的动画类型

目前只支持属性动画,下表列出每个属性动画对应的DSL节点名

动画名 节点名
alpha alphaAnim
scaleX scaleXAnim
scaleY scaleYAnim
translationX translationXAnim
translationY translationYAnim
translationZ translationZAnim
rotation rotationAnim
rotationX rotationXAnim
rotationY rotationYAnim
width widthAnim
height heightAnim
color colorAnim

4、支持的配置项

1)单个动画

配置项 描述
target 动画所要作用的View
values 动画所要运动的数值,与原属性动画一样。float类型给floatArray,int类型给intArray,例如floatArrayOf(0f, 100f)、intArrayOf(500)
repeatCount 和普通属性动画一样
repeatMode 和普通属性动画一样
duration 持续时长
startDelay 延迟多久后启动动画
interpolator 插值器
startColor 开始的颜色值,只有colorAnim有这个配置项
endColor 结束的颜色值,只有colorAnim有这个配置项
onStart{} 动画开始的回调
onRepeat{} 动画重复的回调
onCancel{} 动画被取消的回调
onEnd{} 动画结束的回调
onUpdate{} 动画运行过程中,数值在更新的回调。这个lambda同样有回调一个ValueAnimator对象为参数。可提供变化的数值。

2)集合动画

配置项 描述
duration 持续时长
startDelay 延迟多久后启动动画
interpolator 插值器
playMode 集合动画的播放模式,两种可选。并行播放PlayMode.TOGETHER,顺序播放PlayMode.SEQUENTIALLY,默认为并行。
onStart{} 动画开始的回调
onRepeat{} 动画重复的回调
onCancel{} 动画被取消的回调
onEnd{} 动画结束的回调
onUpdate{} 动画运行过程中,数值在更新的回调。这个lambda同样有回调一个ValueAnimator对象为参数。可提供变化的数值。

2、使用建议。

使用的时候其实可以先用一个懒加载在类的头部去先声明一个动画。然后在要用到的地方去调用。这样既不会浪费资源又能把动画代码放在最外面不去干扰业务,还能动态配置动画的值。

class MainActivity : AppCompatActivity() {private val anim by lazy {animSet {widthAnim {target = mButtonvalues = intArrayOf(mButton.width, 500)}heightAnim {target = mButtonvalues = intArrayOf(mButton.height, 500)}colorAnim {target = mButtonstartColor = "#636978"endColor = "#1AD372"}duration = 500interpolator = OvershootInterpolator()}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)mButton.setOnClickListener {anim.start()}}
}复制代码

Email:tracy550609334@gmail.com

Android动画居然还能这么写相关推荐

  1. 居然还有人在手写测试数据?

    平时我们在开发程序的时候,总免不了需要造一些假数据来验证自己的程序功能是否正常.那么你是通过什么方式来造假数据的呢,不会每次都是手写「测试数据.test」吧. 今天派森酱给大家介绍两个超级好用的库,批 ...

  2. 来一份Android动画全家桶

    前言 自上次<MTRVA2.0来啦>发布后,马上就有小伙伴问我有哪些Android动画,过了一段时间又有小伙伴问我啥时候发布Android动画.其实,在写<MTRVA2.0来啦> ...

  3. android 动画之漂移,[超棒]自定义View居然还能这样?用 Android 实现一条小金鱼游动动画...

    原标题:[超棒]自定义View居然还能这样?用 Android 实现一条小金鱼游动动画 前言 此篇中的小鱼动画是模仿国外一个大牛做的flash动画,第一眼就爱上它了,简约灵动又不失美学,于是抽空试着尝 ...

  4. 索尼android电视图片轮播,电视投屏居然还能这样玩?

    原标题:电视投屏居然还能这样玩? 现如今,投屏几乎成为大家日常生活必不可少的一种观影方式,通过电视投屏可以带来更清晰的画面效果,成为追剧党以及各类球赛爱好者的不二之选. 那么今天小智就以索尼电视为例, ...

  5. 详解Android动画之Frame Animation

    在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画.Frame动画可以被定义在XML文件中,也可以完全编码实现. ...

  6. Android 动画框架详解,第 1 部分

    2019独角兽企业重金招聘Python工程师标准>>> Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框 ...

  7. android动画详解

    转自:工匠若水 http://blog.csdn.net/yanbober 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今天来一发A ...

  8. android 动画卡顿分析工具

    android 动画卡顿分析工具 Android应用性能优化之分析工具 上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅? 这东西其实最初我自己也觉得有点废话,用起 ...

  9. Android动画系列 - PropertyAnim 详解

    前言: 上一篇文章传统View动画与Property动画基础及比较简单对Android动画系统的基础做了介绍,本篇文章将对PropertyAnimation进行全面深入的探讨,本篇文章可以分为两大块, ...

  10. Lottie Android 动画制作与使用

    Lottie Android 动画制作与使用 还未了解Lottie的同志,请观看我上篇文章: Lottie Android 初探 一.效果图预览 二.Adobe After Effects安装 作为I ...

最新文章

  1. OpenGL纹理上下颠倒翻转的三种解决办法(转)
  2. 宝塔面板部署nuxt_MacOS下创建及部署vue.js项目(及Nuxt.js、PM2等相关流程)
  3. java getClass()
  4. CentOS7.2安装jdk7u80
  5. 有关判读flex 模板载入是否结束的一些问题。
  6. mysql报错:Host ***.***.***.*** is not allowed to connect to this MySQL server
  7. 容器(Context)使用之支付系统
  8. lte tm模式_TD―LTE TM8传输模式分析
  9. 嵌入式的c语言,嵌入式c语言
  10. froala 的使用
  11. 内网渗透系列:内网隧道之DNS隧道
  12. 光模块调式总结(SFP)
  13. html の第一天(上)-----适合新手入门前端
  14. 这次彻底读透 Redis
  15. Linux网络-UDP/TCP协议详解
  16. 【C#】数字图像识别
  17. 检查两个时间段是否有时间重叠(允许重叠一部分时间不算重叠)
  18. Python 学习笔记 元组 xxxxxxx XXXXXXXXXX
  19. 滑滑的、嫩嫩的、又一种美观的字体效果做法!
  20. 法律工作者在用的小众但功能强悍的效率工具有这些

热门文章

  1. Tomcat Linux下自启动
  2. httphandler防图片盗链
  3. 正则表达式限制文本框内容
  4. Win XP系统下局域网内无法访问其他计算机的共享如何解决
  5. python二级--第一套0,1,1,2,3,5,8,13,21,34,
  6. Oracle补习班第五天
  7. yousa_team团队项目——兼职平台网站 工作进度
  8. 如何处理Oracle中TEMP表空间满的问题(转载)
  9. hadoop 集群调度 Azkaban2搭建
  10. Kotlin 1.3带来稳定的协程、合约及其他