最近在开发的 App 需要严格遵循 Material Design,PM 天天来提各个控件要改这改那的,这几天我就在想办法把进度条改成 Material Design 的进度条。虽说我们现在用的进度条能在 Android Lolipop 之后的版本显示成符合规范的效果,但 PM 说之前的版本也要能显示这个效果,让我想办法弄好。最后当然是弄好了,所以今天写博客出来和大家分享一下:
实际效果
这个效果初看起来其实满简单的,不就一个进度条会从左到右移动嘛,所以按照这个思路我很快就捣鼓了个控件出来给 PM 看,结果就被喷了…………
因为仔细看的话会发现,他的进度条里还有一个模糊效果,而且进度条移动的时候会变长和变短,这两点才是真正的实现技术难点。
实现思路
刚开始我没啥思路,而且想到还有很多别的活没干,头疼的很,就想着把 Android Lolipop 里这个控件实现的代码拷进项目里,看看能不能直接用起来。然而并不能够…………因为在 Android Lolipop 的实现中,调用了一个叫做 AnimatedVectorDrawable 的类,这个类只能在 Android Lolipop 之后的版本使用,也就意味着我偷懒的想法流产了……
于是我只能另辟蹊径了……
最后我想到,能不能继承 ProgressBar 类,通过自定义 ProgressBar 类的进度条来实现这个效果呢?毕竟 ProgressBar 已经实现了模糊的效果了,只要我能搞定那个变长变短的玩意就可以收工了。
大家可以看看 ProgressBar 的效果:
不妨把中间的颜色设置为想要的进度条颜色,两端的颜色设置为模糊的颜色:
代码:
public class MaterialProgressBar extends ProgressBar {
private static final int INDETERMINATE_MAX =