1.前言
前面的文章中介绍了绘制基本几何图案的方法,其实只要灵活的运用这些方法就可以自定义出我们想要的View。最近观察到家中墙上挂的圆形时钟,于是就在思考怎样用自定义View的方法去实现一个圆形时钟,并且可以记录时间。今天就为大家带来一个自定义的圆形时钟。
2.实现分析
按类型来划分自定义View的实现方式大概可以分为三种,自绘控件、组合控件和继承控件。
当Android自带的View满足不了开发需求时,自定义View就发挥了很好的作用,在这里我们使用的是继承View实现自绘控件。建立一个自定义View需要继承于View类,并且实现其中的至少一个构造函数的两个方法:onMeasure()和onDraw(),onMeasure()用于设置自定义View的尺寸,onDraw()用于绘制View中的内容。
实现后的效果:
实现的关键是:
1.新建一个ClockView的类并且继承于View,重写onMeasure()和onDraw()
2.获取设备屏幕的尺寸
3.在onDraw()方法中进行绘制,需要绘制一个圆形做为表盘
4.绘制表盘中的刻度,数字和指针
5.得到当前设备的时间,设置表盘中指针显示的时间
6.开启一个线程,使得每经过一秒钟获取一次系统时间并且更新表盘中的指针开模拟钟表的计时功能
在获取当前设备屏幕尺寸方面我们需要用到WindowManager这个类,WindowManager是应用程序使用界面和窗口的管理器,可以通过这个类中的getDefaultDisplay().getWidth()和getDefaultDisplay().getHeight()方法分别获取当前设备屏幕的长和高。
//获取屏幕窗口
WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
//获取当前屏幕的宽
width = windowManager.getDefaultDisplay().getWidth();
//获取当前屏幕的高
height = windowManager.getDefaultDisplay().getHeight();
此时width和height的值就是当前设备屏幕的长和高
Android系统在绘制View之前,必须对View进行测量,就是告诉系统需要画一个多大的View,这个过程是在onMeasure()方法中进行的,因此在重写onDraw()方法之前,需要先重写onMeasure()
Android系统还给我们提供了一个MeasureSpec类,通过这个类可以帮助我们去测量View。
测量的模式可以分为以下三种: