Вопрос по Аналоговым часам
товарищи. Нуждаюсь в помощи. Есть приложение, которое показывает аналоговые часы. Сейчас приложение использует системное время. Причем, как я понимаю, запрашивает его каждый раз при отрисовке стрелок. А мне нужно, чтобы время запрашивала программа 1 раз (из ntp сервера) и на основе этого времени часы продолжали работу. Не могу понять, как именно перестроить работу часов под мое условие. Нужно явно прописать угол, на который поворачивается каждая стрелка? Код работы часов прилагаю ниже (его самую важную часть).
private void drawHand(Canvas canvas, double loc, boolean isHour, boolean isMinute) {
double angle = Math.PI * loc / 30 - Math.PI / 2;
int handRadius = 0;
if (isHour) {
handRadius = radius - handTruncation - hourHandTruncation;
} else if (!isHour && isMinute) {
handRadius = radius - handTruncation - minuteHandTruncation;
} else {
handRadius = radius - handTruncation;
}
canvas.drawLine(width / 2, height / 2,
(float) (width / 2 + Math.cos(angle) * handRadius),
(float) (height / 2 + Math.sin(angle) * handRadius), mPaint);
}
private void drawNumeral(Canvas canvas) {
mPaint.setTextSize(fontSize);
mPaint.setStrokeWidth(10);
for (int number:
numbers) {
String tmp = String.valueOf(number);
mPaint.getTextBounds(tmp, 0, tmp.length(), mRect);
double angle = Math.PI / 6 * (number - 3);
//Log.d("angle", String.valueOf(angle));
int x = (int) (width / 2 + Math.cos(angle) * radius - mRect.width() / 2);
int y = (int) (height / 2 + Math.sin(angle) * radius + mRect.height() / 2);
canvas.drawText(tmp, x, y, mPaint);
}
}
private void drawHands(Canvas canvas) {
Calendar c = Calendar.getInstance();
float hour = c.get(Calendar.HOUR_OF_DAY);
hour = hour > 12 ? hour - 12 : hour;
drawHand(canvas, (hour * 5f + c.get(Calendar.MINUTE) * 5f / 60.0), true, false);
drawHand(canvas, c.get(Calendar.MINUTE), false, true);
drawHand(canvas, c.get(Calendar.SECOND), false, false);
}