Exemplo de data e hora: relógio analógico simplesFlash Player 9 e posterior, Adobe AIR 1.0 e posterior Um único exemplo de relógio analógico ilustra esses dois conceitos de data e hora:
Definição da classe SimpleClockO exemplo do relógio é simples, mas é uma boa idéia para organizar até mesmo aplicativos simples que podem ser expandidos com facilidade no futuro. Para tanto, o aplicativo SimpleClock usa a classe SimpleClock para manipular as tarefas de inicialização e controle de tempo e usa outra classe chamada AnalogClockFace para exibir realmente a hora. Veja o código que define e inicializa a classe SimpleClock (observe que, na versão Flash, SimpleClock estende a classe Sprite): public class SimpleClock extends UIComponent
{
/**
* The time display component.
*/
private var face:AnalogClockFace;
/**
* The Timer that acts like a heartbeat for the application.
*/
private var ticker:Timer;
A classe tem duas propriedades importantes:
Criação da superfície do relógioAs próximas linhas do código SimpleClock criam a superfície do relógio que é usada para exibir a hora: /**
* Sets up a SimpleClock instance.
*/
public function initClock(faceSize:Number = 200)
{
// creates the clock face and adds it to the display list
face = new AnalogClockFace(Math.max(20, faceSize));
face.init();
addChild(face);
// draws the initial clock display
face.draw();
O tamanho da superfície pode ser transmitido para o método initClock(). Se nenhum valor de faceSize for transmitido, será usado o tamanho padrão de 200 pixels. Em seguida, o aplicativo inicializa a face e adiciona-a à lista de exibição utilizando o método addChild() herdado da classe DisplayObjectContainer. O método AnalogClockFace.draw() é chamado para exibir a superfície do relógio uma vez, mostrando a hora atual. Início do timerAssim que a superfície do relógio é criada, o método initClock() configura um timer: // creates a Timer that fires an event once per second
ticker = new Timer(1000);
// designates the onTick() method to handle Timer events
ticker.addEventListener(TimerEvent.TIMER, onTick);
// starts the clock ticking
ticker.start();
Primeiro, esse método percorre uma ocorrência de Timer que enviará um evento por segundo (a cada 1000 milissegundos). Como nenhum outro parâmetro repeatCount é transmitido para o construtor Timer(), o Timer será repetido indefinidamente. O método SimpleClock.onTick() será executado uma vez por segundo quando o evento timer for recebido: public function onTick(event:TimerEvent):void
{
// updates the clock display
face.draw();
}
O método AnalogClockFace.draw() simplesmente desenha a superfície e os ponteiros do relógio. Exibição do horário atualA 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). |
|