上效果图:
以下标记一些绘图的核心点:
① 测量自定义view的大小
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getDimension(DEFAULT_WIDTH, widthMeasureSpec); int height = getDimension(DEFAULT_HEIGHT, heightMeasureSpec); viewW = width; cenP.x = viewW / 2; cenP.y = height / 2; radius = Math.min(viewW, height) / 2; setMeasuredDimension(width, height); } private int getDimension(int defaultSize, int measureSpec) { int result; int measureMode = MeasureSpec.getMode(measureSpec); int measureSize = MeasureSpec.getSize(measureSpec); if (measureMode == MeasureSpec.EXACTLY) { result = measureSize; } else if (measureMode == MeasureSpec.AT_MOST) { result = Math.min(defaultSize, measureSize); } else { result = defaultSize; } return result; }
自定义控件的一般测量测量方式, 大家温习一下
②获取系统时间,这里我使用的是Calendar,非常方便,小小的不足是返回时间是24制式
private void getTime() { Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); int min = calendar.get(Calendar.MINUTE); int sec = calendar.get(Calendar.SECOND); if (hour > 12) { hour = hour - 12; } angelS = 360 * sec / 60f; angelM = 360 * min / 60f + sec / 60f; angelH = 360 * hour / 12f + 360 * min / (60 * 12f) + 360 * sec / (60 * 60 * 12f); angelStartS = angelS; angelStartM = angelM; angelStartH = angelH; dateOfMonth = calendar.get(C