3

我正在尝试使用 Android API 来实现这个 WatchFace:

所需表盘的屏幕截图

这些是我用于小时、分钟和秒的颜料:

secondsPaint.setAntiAlias(true);
secondsPaint.setColor(Color.RED);
secondsPaint.setStyle(Paint.Style.STROKE);
secondsPaint.setStrokeJoin(Paint.Join.ROUND);
secondsPaint.setStrokeWidth(3f);
secondsPaint.setAntiAlias(true);
minutesPaint.setColor(Color.WHITE);
minutesPaint.setStyle(Paint.Style.STROKE);
minutesPaint.setStrokeJoin(Paint.Join.ROUND);
minutesPaint.setStrokeWidth(4f);
hoursPaint.setAntiAlias(true);
hoursPaint.setColor(Color.WHITE);
hoursPaint.setStyle(Paint.Style.STROKE);
hoursPaint.setStrokeJoin(Paint.Join.ROUND);
hoursPaint.setStrokeWidth(5f);

我已经实现了以下代码来绘制背景、秒、分钟和小时:

// Background
canvas.drawBitmap(background, 0, 0, null);

然后我画出小时和分钟

// Draw the minute and hour hands.
float minX = (float) Math.sin(minRot) * minLength;
float minY = (float) -Math.cos(minRot) * minLength;
canvas.drawLine(centerX, centerY, centerX + minX, centerY + minY, minutesPai
float hrX = (float) Math.sin(hrRot) * hrLength;
float hrY = (float) -Math.cos(hrRot) * hrLength;
canvas.drawLine(centerX, centerY, centerX + hrX, centerY + hrY, hoursPaint);

最后是秒

// draw seconds
float secX = (float) Math.sin(secRot) * secLength;
float secY = (float) -Math.cos(secRot) * secLength;
canvas.drawLine(centerX, centerY, centerX + secX, centerY + secY, secondsPaint);

我需要:

  • 在屏幕中间创建一个圆圈,然后将小时、分钟和秒从中心移动几个像素,就像显示的图片一样。
  • 使秒和分钟更“平滑”,因为设置了抗锯齿,但它没有按预期工作

目前结果如下:

实际表盘

4

1 回答 1

2

画一个圆就像使用drawCircle().
因此,肮脏的技巧可能是绘制白色的一个和另一个具有相同背景颜色的较大的(甚至可能是较小的)以覆盖分针和秒针的部分。

因此,在手之后绘制,这些圆圈将覆盖您要隐藏的部分。

一个非常便宜的技巧(不涉及其他三角函数)。
肯定有效。

您甚至可以使用可绘制的图层列表覆盖在中心... ;)

但我猜drawCircle()非常简单。

于 2015-06-10T12:02:10.123 回答