嗯,产品需求要将语音机器人交互实现文中的动画效果进行修改,改成什么样呢?
演示视频太大了,随便截了几个图:
可以看到,整体变简洁了,整体效果主要有两个动画:
- 背景框缩小的动画,同时圆角慢慢变大;
- 中间提示文案的闪烁效果,变灰然后变亮;
机器人上下眨眼睛的动画,搞个 Gif 图就完事儿了,让我自己画也是画不出来的。
缩小动画
因为有圆角改变的动画,所以单独弄个图,ImageView 进行缩放是实现不了的:没法改变圆角。然后找到一个可以设置圆角的类:GradientDrawable。那么思路就比较明确了:先说服设计背景色就使用渐变色实现,下面就好实现了:
1 | private val drawable = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, intArrayOf(Color.parseColor("#1B3461"), Color.parseColor("#0A1C42"))) |
使用属性动画,计算每一刻的属性,然后赋值即可。需要放大的时候,将动画返回来即可。
文字闪烁
文字闪烁的动画应该是在哪里见过的,但是一时想不起来了,搜索的时候也找不准关键字,于是找我的大腿舍友询问一波:
于是思路就来了:给 Paint 设置渐变的 Shader(LinearGradient),然后改变 Shader 的坐标或者位移,就可以实现动画效果了。代码如下:
1 | class ShiningTextView(context: Context, attrs: AttributeSet?) : View(context, attrs) { |
几点 Tips:
- 给 LinearGradient 设置 Matrix,使用 Matrix 进行 translate,就可以一点点改变文本的颜色。
- drawText 的第二个参数是 baseline 的值,所以需要结合画笔的设置,计算 baseline。