Android动画居然还能这么写
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动画居然还能这么写相关推荐
- 居然还有人在手写测试数据?
平时我们在开发程序的时候,总免不了需要造一些假数据来验证自己的程序功能是否正常.那么你是通过什么方式来造假数据的呢,不会每次都是手写「测试数据.test」吧. 今天派森酱给大家介绍两个超级好用的库,批 ...
- 来一份Android动画全家桶
前言 自上次<MTRVA2.0来啦>发布后,马上就有小伙伴问我有哪些Android动画,过了一段时间又有小伙伴问我啥时候发布Android动画.其实,在写<MTRVA2.0来啦> ...
- android 动画之漂移,[超棒]自定义View居然还能这样?用 Android 实现一条小金鱼游动动画...
原标题:[超棒]自定义View居然还能这样?用 Android 实现一条小金鱼游动动画 前言 此篇中的小鱼动画是模仿国外一个大牛做的flash动画,第一眼就爱上它了,简约灵动又不失美学,于是抽空试着尝 ...
- 索尼android电视图片轮播,电视投屏居然还能这样玩?
原标题:电视投屏居然还能这样玩? 现如今,投屏几乎成为大家日常生活必不可少的一种观影方式,通过电视投屏可以带来更清晰的画面效果,成为追剧党以及各类球赛爱好者的不二之选. 那么今天小智就以索尼电视为例, ...
- 详解Android动画之Frame Animation
在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画.Frame动画可以被定义在XML文件中,也可以完全编码实现. ...
- Android 动画框架详解,第 1 部分
2019独角兽企业重金招聘Python工程师标准>>> Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框 ...
- android动画详解
转自:工匠若水 http://blog.csdn.net/yanbober 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今天来一发A ...
- android 动画卡顿分析工具
android 动画卡顿分析工具 Android应用性能优化之分析工具 上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅? 这东西其实最初我自己也觉得有点废话,用起 ...
- Android动画系列 - PropertyAnim 详解
前言: 上一篇文章传统View动画与Property动画基础及比较简单对Android动画系统的基础做了介绍,本篇文章将对PropertyAnimation进行全面深入的探讨,本篇文章可以分为两大块, ...
- Lottie Android 动画制作与使用
Lottie Android 动画制作与使用 还未了解Lottie的同志,请观看我上篇文章: Lottie Android 初探 一.效果图预览 二.Adobe After Effects安装 作为I ...
最新文章
- OpenGL纹理上下颠倒翻转的三种解决办法(转)
- 宝塔面板部署nuxt_MacOS下创建及部署vue.js项目(及Nuxt.js、PM2等相关流程)
- java getClass()
- CentOS7.2安装jdk7u80
- 有关判读flex 模板载入是否结束的一些问题。
- mysql报错:Host ***.***.***.*** is not allowed to connect to this MySQL server
- 容器(Context)使用之支付系统
- lte tm模式_TD―LTE TM8传输模式分析
- 嵌入式的c语言,嵌入式c语言
- froala 的使用
- 内网渗透系列:内网隧道之DNS隧道
- 光模块调式总结(SFP)
- html の第一天(上)-----适合新手入门前端
- 这次彻底读透 Redis
- Linux网络-UDP/TCP协议详解
- 【C#】数字图像识别
- 检查两个时间段是否有时间重叠(允许重叠一部分时间不算重叠)
- Python 学习笔记 元组 xxxxxxx XXXXXXXXXX
- 滑滑的、嫩嫩的、又一种美观的字体效果做法!
- 法律工作者在用的小众但功能强悍的效率工具有这些
热门文章
- Tomcat Linux下自启动
- httphandler防图片盗链
- 正则表达式限制文本框内容
- Win XP系统下局域网内无法访问其他计算机的共享如何解决
- python二级--第一套0,1,1,2,3,5,8,13,21,34,
- Oracle补习班第五天
- yousa_team团队项目——兼职平台网站 工作进度
- 如何处理Oracle中TEMP表空间满的问题(转载)
- hadoop 集群调度 Azkaban2搭建
- Kotlin 1.3带来稳定的协程、合约及其他