Android 鬼点子-Q弹的计数器
作者简介
本篇是来自 Greenda米 的投稿,使用当前大热的 Kotiln 配合 SpringAnimation 实现的一个 Q弹的计数器 效果,希望大家会喜欢。
Greenda米 的博客地址:
http://www.jianshu.com/u/71adc9f033a8
无意在某设计网站看到一个这样的设计。留下了很深的印象。
然后,我自己尝试的实现了一下,另外丰富了一下效果,如下:
这个控件支持设置颜色,支持是否允许小于0。使用 Kotlin 实现。
好像目前在购物车常用到这个效果。
这个控件主要用到了 Google 新出物理弹性动画SpringAnimation。SpringAnimation 类是最近(25.3.0版本)才添加在支持库中的一个类,它可以很方便的实现弹簧效果。
对 SpringAnimation 不了解的朋友,可以参见之前的文章:《Android新的动画库-SpringAnimation(弹簧动画)》
SpringAnimation 支持的属性有如下:
如果是一个现有的控件,想要实现弹簧效果,可以参考另外一篇文章(文末付链接)。
本文是一个非常规的使用方式,主要是使用了 SpringAnimation 计算结果,更新中间小球及整个控件的位置。
首先上完整代码:
Gradle 是这样的,我用的是 AS3.0 。所以引入方式有点不同,但这不是本文的重点。
Main.kt 中设置颜色,以及是否支持负数。
布局文件是这样的。
代码中比较重点的就是DynamicAnimation.OnAnimationUpdateListener
,实现了监听器,得到 SpringAnimation 的计算结果。然后将结果当做坐标,根据坐标重绘小球。
在 onTouch()
中。
滑动的时候,控件跟随手指移动,松手后,给动画赋一个加速度,然后开始动画,此时之前设置的监听器收到了事件。监听器中收到计算后的数值,将其赋值给 centerX 。当 centerX 改变后。
要保证小球坐标的位置不会超出整个控件的大小,然后呼叫重绘。
最后说一下小球的阴影绘制,阴影的范围要实时计算,当小球运动到两端的时候,是没有阴影的。
弹动效果参考:http://www.jianshu.com/p/c2962a8135f5
推荐阅读: