Este documento apresenta uma introdução à API de baixo nível do JavaME, descrevendo suas principais classes como Canvas e Graphics para desenho na tela de dispositivos móveis. Ele também mostra exemplos básicos de como usar essas classes para criar interfaces simples e sprites animados.
1. Erisvaldo Gadelha Saraiva Júnior
Introdução a API de Baixo Nível
JavaME
Contato: erisvaldojunior@gmail.com
2. Objetivo
Desenvolver aplicações para dispositivos móveis com interfaces
arrojadas, através do uso da API de Baixo Nível do JavaME.
Organize with Sections
Imagens do Mobile Ticket
Viewer, aplicação de
Mobile Ticket
desenvolvida pela Avaty!
Tecnologia.
3. Roteiro de Aula
Técnicas
A API de Indo para a Avançadas e
Baixo Nível Prática Exemplos
Adicionais
Introdução a API de Baixo Nível do JavaME
4. API de Baixo Nível
Descrição das Classes e como usá-las
5. Estrutura de classes do MIDP
A API de baixo nível consiste,
basicamente, na classe Canvas e classes
auxiliares (como Graphics, Image, Font).
No MIDP 2.0 ou superior, sua classe
derivada, GameCanvas, bem como as
classes que compõem a Game API,
também são consideradas de baixo
nível.
7. O que é a classe Canvas?
Canvas é uma classe abstrata que deve ser especializada para a
confecção de uma tela em baixo nível.
As classes que herdam
de Canvas DEVEM
implementar o método
paint(), responsável por
Classe Canvas
desenhar a tela.
As classes que herdam
de Canvas PODEM
implementar o método
keyPressed(),
responsável por
verificar se uma
determinada tecla foi
pressionada.
8. Como desenhar usando Canvas?
O método paint() recebe como argumento uma instância de
Graphics, com a qual é possível desenhar na tela.
Graphics possui
Classe Canvas
diversos métodos
para desenhar na
tela, tais como:
drawImage(),
drawRect(),
fillRect(),
drawString(), etc.
9. E quanto aos diversos tamanhos de tela?
A altura e a largura da tela podem ser obtidas pelos métodos
getHeight() e getWidth(), respectivamente.
Todos os desenhos
devem ser
Classe Canvas
posicionados de
acordo com as
dimensões da tela
(posições
relativas), nunca
com números fixos
(posições
absolutas).
10. Como capturar as teclas pressionadas?
Qualquer tecla que o usuário pressionar pode ser tratada pelo
método keyPressed(), que recebe um inteiro como argumento
indicando o código da tecla pressionada.
PROBLEMA: as
Classe Canvas
“Soft Keys” não
possuem
constantes
definidas em
Canvas, ou seja, o
código das teclas
varia de aparelho
para aparelho.
11. Teclas em Canvas
A classe Canvas possui uma série de
constantes que referenciam os códigos das
teclas do aparelho.
Essas constantes devem ser usadas em
detrimento do inteiro correspondente porque
o seu valor pode variar de um aparelho para o
outro.
12. Indo para a Prática
Construindo uma interface com a API de Baixo Nível
14. Código Splash Screen
Âncoras especificam o
posicionamento da
imagem relativo ao ponto
(X, Y) no qual se deseja
inserí-la na tela. Nesse
caso, a imagem está sendo
centralizada nesse ponto.
16. Sprite é uma classe da Game API do MIDP 2.0
Sprites são criados a partir de imagens que possuem um ou mais frames.
Os Sprites podem ser animados, rotacionados, espelhados, etc.
17. Crie uma nova instância
da classe Sprite;
Defina a posição do mesmo
através dos métodos
defineReferencePixel() e
setRefPixelPosition();
Construtor da classe Sprite
Desenhe o Sprite na tela,
através do método paint();
Você poderá alterar o frame
do Sprite a qualquer momento
através dos métodos
nextFrame(), prevFrame() e
Como adicionar um Sprite no Canvas? setFrame().
18. Vamos ao desafio!
Use Canvas para representar a tela, o
método drawString() para os textos e
represente o background e cada
botão como uma instância de Sprite.
Por fim, implemente o método
keyPressed() de forma a navegar pelo
Você é a capaz de construir menu. Note que basta mudar o frame
o menu acima? da opção selecionada e definir o
frame dos demais como sendo o
inicial.
20. DIFERENTES TELAS
» Os dispositivos móveis possuem telas com
vários tamanhos e resoluções;
» A API de baixo nível do JavaME não possui
suporte nativo a redimensionamento de
imagens;
» É necessário realizar esse redimensionamento
“na unha” ou, ainda, oferecer imagens de
diferentes tamanhos e utilizar a mais
adequada para a tela do aparelho.
21. Diferentes Telas: Solução Proposta
Cada imagem da aplicação pode estar
disponível em três tamanhos, para telas
pequenas, médias e grandes. Por
exemplo: 128x160 (Tela Pequena),
176x208 (Média) e 240x320 (Grande);
Ao iniciar a aplicação, obtém-se a altura
e a largura da tela e, a partir dessas,
carrega-se as imagens adequadas para
o tamanho de tela específico;
No caso do background, pode-se
redimensionar a imagem logo após
obter-se a altura e largura da tela do
aparelho, assegurando que o mesmo
irá preencher toda a tela.
22. Para garantir a portabilidade, faz-se necessário a adoção de uma das seguintes soluções
para tratar as diferenças dos códigos das SOFT KEYS entre os dispositivos:
1. Usar Commands caso não haja necessidade de formatação específica para os botões
inferiores;
2. Detectar, em tempo de execução, o fabricante do aparelho e, assim, configurar os
valores adequados;
3. Definir diretivas de pré-compilação de forma a gerar JARs específicos para cada família
de aparelhos, cada qual com os valores corretos das Soft Keys (J2ME Polish faz esse
trabalho).
23. ?
E quanto a fonte…
Como posso mudar?
BITMAP FONTS são a solução!