查看原文
其他

Android 鬼点子-Q弹的计数器

2017-08-03 Greenda米 承香墨影


作者简介

本篇是来自 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


推荐阅读:



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存