天天看点

Android自定义控件入门实践之雷达扫描控件

以前因为工作的关系,对于自定义控件用的少之又少,无非就是把几个控件放置到ViewGroup内部,然后提供开放方法,就成了一个所谓的自定义控件,但是这种小伎俩太简单,面试的时候这点东西根本Hold不住场,所以工作之余还是得把这块补补,也好加深一下对控件的理解。

好,啰嗦了挺多的,我们先看一下实现的效果:

Android自定义控件入门实践之雷达扫描控件

只是截取了一部分运行时图,这个控件只是重写了onDraw方法,其它一一保留给View,简单说一下这个的实现方式:

使用一只画笔用来画等距的四个圆,使用另外一只画笔画一个标准的角度渐变图。

Android提供了标准的渐变图,同样在PhotoShop中我们一样可以找到这些渐变图,这样一来,我们就可以根据UI设计师设计的套路来做同样的效果了:

Android自定义控件入门实践之雷达扫描控件

线性渐变图

Android自定义控件入门实践之雷达扫描控件

径向渐变图

Android自定义控件入门实践之雷达扫描控件

菱形渐变图

Android自定义控件入门实践之雷达扫描控件

角度渐变图

Android自定义控件入门实践之雷达扫描控件

对称渐变图

好了,我们将这些基本的图绘制出来之后,它还是个静态的,我们需要将它动起来,那怎么使它动起来呢,对,我们需要线程来驱动它进行重绘,需要注意的是,线程一定要出口。

开启线程有两种方式,一种是传统的开线程的方式,使用Thread。另一种则使用向主线程消息队列中发送消息来驱动。我们使用第二种:hander.postRunnable。

来贴一下整体的代码:

好,这样运行起来就是我们图例所显示的样子,最后看一下内存使用以及CPU使用情况:

Android自定义控件入门实践之雷达扫描控件
Android自定义控件入门实践之雷达扫描控件

都不是很多,这只是最基本的,我们还可以将它进一步的优化。

有什么疑问欢迎留言讨论。

继续阅读