A maior parte do código na classe AnalogClockFace envolve a configuração dos elementos de exibição da superfície do relógio. Ao ser inicializado, o AnalogClockFace desenha um contorno circular, coloca um rótulo de texto numérico em cada marcação de hora e cria três objetos Shape, um para cada ponteiro do relógio (horas, minutos e segundos).
Assim que o aplicativo SimpleClock é executado, o método
AnalogClockFace.draw()
é chamado a cada segundo do seguinte modo:
/**
* Called by the parent container when the display is being drawn.
*/
public override function draw():void
{
// stores the current date and time in an instance variable
currentTime = new Date();
showTime(currentTime);
}
Este método salva a hora atual em uma variável para que o horário não mude no meio do desenho dos ponteiros do relógio. Em seguida, o método
showTime()
é chamado para exibir os ponteiros do seguinte modo:
/**
* Displays the given Date/Time in that good old analog clock style.
*/
public function showTime(time:Date):void
{
// gets the time values
var seconds:uint = time.getSeconds();
var minutes:uint = time.getMinutes();
var hours:uint = time.getHours();
// multiplies by 6 to get degrees
this.secondHand.rotation = 180 + (seconds * 6);
this.minuteHand.rotation = 180 + (minutes * 6);
// Multiply by 30 to get basic degrees, then
// add up to 29.5 degrees (59 * 0.5)
// to account for the minutes.
this.hourHand.rotation = 180 + (hours * 30) + (minutes * 0.5);
}
Primeiro, este método extrai os valores para horas, minutos e segundos do horário atual. Depois, esses valores são usados para calcular o ângulo de cada ponteiro. Como faz uma rotação completa em 60 segundos, o ponteiro dos segundos gira 6 graus a cada segundo (360/60). O ponteiro dos minutos gira do mesmo modo em cada minuto.
O ponteiro das horas também é atualizado a cada minuto e pode avançar um pouco à medida que os minutos passam. Ele gira 30 graus por hora (360/12), mas também gira meio grau por minuto (30 graus dividido por 60 minutos).