BlinkLayout源码分析
private static class BlinkLayout extends FrameLayout
首先,我猜,你肯定不知道有这个BlinkLayout的存在!!!
据我所知,没有一本书里讲到过它(反正我是没见过),甚至国内的博客都没有人提及过它!!
因为它隐藏的非常深,是LayoutInflater的静态内部类,是我在看LayoutInflater源码的时候发现的!简直是个彩蛋!!
在这里发现的:
1 | if (name.equals(TAG_1995)) { |
oh,它其实还真算是个彩蛋,似乎是为了庆祝1995年的复活节,有兴趣可以看看
reddit上的讨论。
blink 有 使…闪烁的意思,可以用来做一闪一闪的效果哦!!!
先上个简单的效果图看看它的效果:

是不是很闪?
明明这么闪耀,为何要躲起来?
BlinkLayout的使用也有些特殊,它跟merge、include这些标签一样,用标签blink来表示。
贴一下上图效果的XML:
1 | <blink |
非常简单!
那么它是怎么实现的呢?
接下去源码分析。
源码分析
BlinkLayout的源码非常简单,只有几十行!我就全部贴出来啦!
1 | private static class BlinkLayout extends FrameLayout { |
从源码中可以看出,BlinkLayout通过Handler循环调用invalidate()方法,触发并控制dispatchDraw来做到一闪一闪的效果,默认的闪烁间隔为Handler的DELAY时间,即500毫秒。
## 小结
BlinkLayout的使用场景或许不多,但是它的代码还是非常漂亮哒!~
如果有类似需求,仿造它的源码写一个功能更强的View也是非常简单的!
深入源码阅读是一件相对枯燥的事情,能发现这么个小彩蛋也是棒棒的,心情也美丽了些,哈哈!~~