Este documento apresenta uma aula sobre o Android 3.0, gráficos e animações, e tendências do mundo mobile. É abordado os novos recursos do Android 3.0 tanto para usuários quanto desenvolvedores, incluindo fragments, loaders, action bar, clipboard e drag and drop. Também são discutidos o framework de animação e UI estendido, além de dicas para otimizar aplicativos para tablets e o desenvolvimento para o Android 3.0. Por fim, há uma seção sobre property animation e renderscript.
Ginga-J Emulator: uma Ferramenta de Execução de Aplicações Imperativas para o...
Android Aula 5
1. Erisvaldo Gadelha Saraiva Júnior
Faculdade de Tecnologia de João Pessoa (FATEC-JP)
Especialização em Desenvolvimento para Dispositivos Móveis
Disciplina: Tecnologias para Dispositivos Móveis
Android (Parte 5)
E-mail: erisvaldojunior@gmail.com
Site: http://erisvaldojunior.com
Twitter: @erisvaldojunior
2. Roteiro da Aula
ANDROID GRÁFICOS E TENDÊNCIAS
3.0 ANIMAÇÕES
Introdução ao Android 3.0, UI avançada e Tendências do mundo mobile
3. ANDROID 3.0
Visão geral e recursos do Android 3.0
4. Novos recursos para o Usuário
Novidades do Android 3.0 Nova interface, otimizada para os tablets
• System Bar
• Action Bar
• 5 Homes Customizáveis
• Aplicações recentes
5. Novos recursos para o Usuário
Novidades do Android 3.0
• Novo Teclado
• Manipulação de Textos
• Mais conectividade
• Aplicações-chave melhores
6. Novos recursos para o Usuário
Novidades do Android 3.0 Aplicações-chave foram aperfeiçoadas
7. Novos recursos para o Desenvolvedor
Novo framework de UI, refinado para tablets
• Activity Fragments
Novidades do Android 3.0
• Widgets remodelados
• Action Bar customizável
• Notificações mais ricas
• Seleção múltipla, clipboard
e recurso de drag-and-drop
8. Novos recursos para o Desenvolvedor
• Novo e flexível Framework de animação
Novidades do Android 3.0
• Aceleração gráfica 2D por hardware
• Renderscript (engine 3D)
• Suporte a múltiplos processadores
• HTTP Live streaming (M3U)
• Framework de DRM
• Transferência de arquivos de mídia (MTP/PTP)
• Mais opções de conectividade
• Segurança para ambientes corporativos
• Compatibilidade com aplicações existentes
9. Fragments
Componente que permite a separação de elementos distintos de
uma Activity em módulos com interfaces e ciclos de vida próprios.
Pode-se combinar múltiplos fragmentos em uma única Activity para
construir uma interface de vários painéis na qual cada painel
gerencia seu próprio ciclo de vida e entradas do usuário.
• Fragments podem ser reusados em múltiplas Activitys;
• Pode-se adicionar, remover, substituir
API Level 11
e animar
Fragments dentro de uma Activity;
• Por meio de layouts alternativos, pode-se combinar
Fragments baseado no tamanho e orientação da tela;
• Fragments tem acesso direto a sua Activity e pode
acessar a Action Bar da Activity.
10. Loaders
Permitem, de maneira assíncrona, facilmente carregar dados em
um Activity ou Fragment.
• Estão disponíveis em qualquer Activity ou Fragment;
• Provêem carregamento assíncrono de dados;
API Level 11
• Monitoram a fonte dos dados e entregam novos
resultados a medida que o conteúdo muda;
• Reconectam-se automaticamente ao último cursor do
Loader quando são recriados após uma mudança de
configuração. Assim, não necessitam reconsultar os dados.
11. Action Bar
Substitui a barra de título na parte superior da Activity. Mostra o
ícone da aplicação e provê uma nova interface para os itens do
menu de opções. Além disso, permite ao desenvolvedor:
• Adicionar itens de menu diretamente na Action Bar
(Action Item);
• Substituir um Action Item por um Widget, como uma
caixa de pesquisa (Action View);
API Level 11
• Adicionar uma ação para o ícone da aplicação bem como
substituí-lo por um ícone personalizado;
• Opções de navegação para os fragmentos da Activity;
• Personalizar a Action Bar com temas e fundos.
12. System Clipboard
Área de transferência entre aplicações (texto, endereços, intents)
• Possibilita acesso a dados que o usuário deseja copiar por meio de um
Content Provider. Dados complexos como imagens ou estruturas podem
ser copiados de uma aplicação para outra;
• Para obter o Clipboard, usa-se o seguinte método:
ClipboardManager.getSystemService(CLIPBOARD_SERVICE);
• Dados são adicionados ao Clipboard por meio de um objeto da classe
API Level 11
ClipData, que possui métodos como newPlainText(), newUri() e
newIntent();
• Através do método setPrimaryClip(), atribui-se um ClipData a um
Clipboard. O conteúdo pode ser obtido através do getPrimaryClip();
• O Clipboard armazena possui apenas um objeto ClipData mas esse
objeto pode ser composto por vários itens (ClipData.Item).
13. Drag and Drop
Dados podem ser transferidos de um lugar para outro
• Traduzindo para o desenvolvedor: objetos ClipData podem ser movidos
de uma View para outra;
• Cada operação Drag and Drop é definida por um objeto DragEvent, com
estados como ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED e
ACTION_DROP definindo seu ciclo de vida;
API Level 11
• O método startDrag() pode ser chamado em uma View provendo um
ClipData que representa a informação a ser transferida;
• O método setOnDragListener() permite que a View registre um
OnDragListener que permitirá a recepção de objetos Drag and Drop. O
listener obriga a implementação do método onDrag().
14. Framework de Animação
Novo e flexível framework de animação para objetos como
Fragment, View e Drawable.
• Pode-se definir duração, quantidade de repetições, taxa de
atualização, atraso, etc;
• Através da classe LayoutTransition é possível estabelecer animações
API Level 11
automáticas para mudanças que foram realizadas no layout da Activity;
• Para definir animações personalizadas, usa-se o método
setAnimation() de LayoutTransition, passando-se um animador
personalizado (objeto da classe ValueAnimator ou ObjectAnimator).
15. Framework estendido de UI
Diversas novidades para o framework de interface gráfica
• Seleção múltipla para ListView e GridView através do método
setChoiceMode() e o modo CHOICE_MODE_MULTIPLE_MODAL, além
de registrar-se um MultiChoiceModeListener;
• Novas APIs para transformar Views 2D e 3D, através de métodos
como setAlpha(), setPivotX(), setRotationX() e setScaleX();
API Level 11
• Novos temas holográficos que são atribuídos como base padrão
quando android:minSdkVersion ou android:targetSdkVersion estão
setados para “11” no AndroidManifest.xml;
• Novos widgets como AdapterViewAnimation, AdapterViewFlipper,
CalendarView, ListPopupWindow, NumberPicker, PopupMenu,
SearchView e StackView.
16. Suporte aprimorado ao JSON
Classes JsonReader e JsonWriter adicionados ao pacote org.json.
• Cria-se uma instância de JsonReader passando um
InputStreamReader como parâmetro;
• A leitura começa com beginObject() e o nome da chave é lido com
API Level 11
nextName(). O valor é lido de acordo com o tipo, ex: nextInt(),
nextString(), etc;
• Esse processo é repetido enquanto hasNext() retorna verdadeiro.
17. Pacotes adicionados
• android.animation – Novo framework de animação;
• android.drm – API para gerenciamento de direitos digitais;
• android.renderscript – engine para renderização 3D.
API Level 11
18. Otimizando Apps para o Android 3.0
Qualquer aplicação, por padrão, é compatível com dispositivos que
rodam Android 3.0, uma vez que as aplicações Android são “forward-
compatible”.
• Ambiente de desenvolvimento
Otimizando aplicações
• SDK Platform Android 3.0
• Android SDK Tools r10
• Android SDK Platform-Tools r3
• Documentação do Android SDK, API Level 11
• Exemplos do Android SDK, API Level 11
• Criar AVD com Android 3.0 e skin WXGA
• Aplicar o novo tema holográfico – Defina o
android:sdkTargetVersion=“11” no AndroidManifest,
fazendo com que a aplicação use o novo tema holográfico
quando estiver rodando em dispositivos Android 3.0. Não é
necessário alterar o android:minSdkVersion.
19. Otimizando Apps para o Android 3.0
• Prover layouts alternativos para telas extra-grandes
(xlarge)
Otimizando aplicações
• Certificar-se que existe um layout otimizado na aplicação para
orientação landscape (considerada normal nos tablets);
• Usa-se o qualificador xlarge para telas extra-grandes (tablets) e
land para a orientação landscape. Pode-se prover imagens, por
exemplo, para res/layout-xlarge-land/;
• Reconsiderar posicionamento dos botões para adequar-se ao
usuário que está segurando o tablet com as duas mãos;
• Tamanhos de fonte devem usar unidades “sp”. Em alguns casos,
pode-se usar fontes maiores para xlarge. Certificar-se de usar as
melhores práticas para independência de tela.
20. Atualizando ou desenvolvendo uma nova
Desenvolvendo para Android 3.0 aplicação para Android 3.0
• Declarar android:minSdkVersion=“11” na tag <uses-sdk> do
AndroidManifest.xml, habilitando o novo tema holográfico e Action Bar nas
Activities;
• Usar a Action Bar;
• Dividir as Activities em Fragments;
• Usar o novo framework de animação para as transições;
• Habilitar aceleração por hardware com android:hardwareAccelerated=“true”
para cada <activity> ou para a <application> no AndroidManifest.xml;
• Aprimorar os widgets com os novos recursos;
• Usar os novos recursos (Drag and Drop), nova API de Bluetooth, sistema de
Clipboard, Renderscript, etc;
• Publicar a aplicação para telas extra grandes (xlarge), decidindo se a mesma
será portável para smartphones ou funcionará apenas nos tablets.
23. Property Animation X View Animation
Property Animation foi introduzido no Android 3.0 e é mais
poderoso e flexível que o View Animation.
• View Animation é capaz apenas de animar objetos View em certos aspectos
como escala e rotação. A cor de fundo da View, por exemplo, não poderia ser
alterada;
Property Animation
• Property Animation é capaz de animar qualquer objeto e, como o próprio
nome diz, modifica uma propriedade (atributo) desse objeto de acordo com o
tempo;
• Assim, Property Animation permite que se defina:
• Duração: pode-se especificar a duração da animação;
• Interpolação de tempo: como os valores da propriedade são calculados
em termos de uma função do tempo corrente de animação;
• Contador de repetições e comportamento: repetir a animação uma
determinada quantidade de vezes. Pode-se executar de trás para frente;
• Conjuntos de animações: agrupar animações em conjuntos lógicos que
são executados em conjunto ou sequencialmente após certos atrasos;
• Taxa de atualização: com que frequência os frames da animação são
atualizados.C
24. Como funciona
Property Animation Utilizando o framework Property Animation para fazer animações
Animação linear
Animação não-linear
25. Como funciona
ValueAnimator rastreia o tempo de animação e o valor da
propriedade que está sendo animada.
No exemplo da Animação Não-Linear
TimeInterpolator : AccelerateDecelerateInterpolator
Property Animation
TypeEvaluator : IntEvaluator
Para iniciar uma animação, cria-se um objeto ValueAnimator passando os
valores inicial e final da animação, bem como sua duração. Em seguida, invoca-
se o método start() para que a animação possa começar.
26. Classes que compõem o framework
ValueAnimator – calcula os valores da animação e contém detalhes do tempo
de cada animação, informação sobre quando a animação se repete, listeners
que recebem eventos de atualização e possibilidade de atualização da
propriedade por tipo.
É importante notar que o ValueAnimator não modifica o valor da propriedade
Property Animation
que está sendo animada, apenas calcula os valores de acordo com o tempo.
Para isso, deve-se implementar o método de atualização para modificar a
propriedade de acordo com a lógica desejada.
ObjectAnimator – herda de ValueAnimator e permite
definir um objeto e propriedade para animar. Ao contrário
do ValueAnimator, essa classe atualiza a propriedade assim
que computa um novo valor para a animação. Usa-se
ObjectAnimator na maior parte do tempo, por questões de
facilidade.
AnimatorSet – agrupa animações e permite que possam ser executadas
sequencialmente ou com atrasos específicos.
28. Animando com ValueAnimator
No exemplo abaixo, calcula valores entre 0 e 1 durante 1000 milisegundos
quando o método start() é executado.
Property Animation
No exemplo abaixo, calcula valores entre startPropertyValue e
endPropertyValue, usando a lógica provida por MyTypeEvaluator durante 1000
milisegundos quando o método start() é executado.
29. Animando com ValueAnimator
• Animator.AnimatorListener
• onAnimationStart() – chamado quando a animação começa.
• onAnimationEnd() – chamado quando a animação termina.
• onAnimationRepeat() – chamado quando a animação se repete.
• onAnimationCancel() – chamado quando a animação é
Property Animation
cancelada.
• ValueAnimator.AnimatorUpdateListener
• onAnimationUpdate() – chamado em cada frame da animação.
Pode-se capturar o valor calculado através do método
getAnimatedValue() e atualizar a propriedade de acordo.
Implementar esse listener é obrigatório se usar o ValueAnimator.
Exemplo de uso: objeto newBall, propriedade “alpha”, variando de 1 a 0 durante
250ms. Ao término da animação, objeto é removido da lista.
30. Animando com ObjectAnimator
ObjectAnimator facilita para o desenvolvedor que não é mais obrigado a
implementar o AnimatorUpdateListener, uma vez que a propriedade animada é
atualizada automaticamente.
No exemplo abaixo, calcula valores entre 0 e 1 para a propriedade “alpha” do
Property Animation
objeto foo durante 1000 milisegundos quando o método start() é executado.
• Getter e Setter da propriedade que está sendo animada
(“alpha”) precisam existir e devem ser do mesmo tipo que
o especificado no ObjectAnimator. No exemplo acima,
teríamos na classe do objeto foo:
• public void setAlpha(Float alpha);
• public Float getAlpha();
32. Animando Views
• Propriedades da classe View que facilitam
animações:
• translationX e translationY;
Property Animation
• rotation, rotationX e rotationY;
• scaleX e scaleY;
• pivotX e pivotY;
• x e y;
• alpha.
Exemplo de uso: rotacionar a View “myView” em 360 graus.
34. Veja também…
• Renderscript – Oferece alto desempenho 3D em nível nativo.
Disponível a partir do Android 3.0.
http://developer.android.com/guide/topics/graphics/renderscript.html;
• OpenGL ES API – Android suporta OpenGL ES 1.0, equivalente a versão
1.3 do OpenGL. Muito utilizado para jogos.
View Animation
Gráficos 2D e 3D
http://developer.android.com/guide/topics/graphics/opengl.html;
• Gráficos 2D – Atráves de objetos Drawable, é possível desenhar na tela
do dispositivo Android, bem como adicionar imagens.
http://developer.android.com/guide/topics/graphics/2d-graphics.html;
• View Animation - Permite animar objetos View com operações como
escala e rotação. No Android 3.0 pode ser substituído pelo framework de
Property Animation.
http://developer.android.com/guide/topics/graphics/view-
animation.html
36. Android Market oferece serviço de In-App Billing
Pode-se vender conteúdo digital dentro do aplicativo, como
itens ou fases de jogos e funcionalidades extras para
aplicativos. O share é de 70% para o desenvolvedor e 30% para
a Google em cima do valor da venda.
In-App Billing
37. Como funciona
Aplicação envia requisição de pagamento para a aplicação do
Android Market via IPC e recebe respostas na forma de
Broadcast Intents.
A implementação do serviço de In-App Billing se baseia, de modo geral, em
três componentes:
• Um Service que processa as requisições de pagamento da aplicação e repassa
essas requisições para o serviço de In-App Billing;
• Um BroadcastReceiver que recebe as respostas de pagamento da aplicação
In-App Billing
Android Market;
• Um componente de segurança que realiza tarefas relacionadas a segurança
do processo, como verificação da assinatura.
Opcionalmente, pode-se adicionar mais dois componentes para melhorar a
experiência:
• Um Handler que processa notificações da compra, erros e status;
• Um Observer que envia callbacks para a aplicação para atualizar a interface
com o andamento da compra e informaçòes extras.
38. Como funciona
Aplicação envia requisição de pagamento para a aplicação do
Android Market via IPC e recebe respostas na forma de
Broadcast Intents.
• Aplicação chama o método IPC
In-App Billing
sendBillingRequest(), disponível na
interface MarketBillingService,
passando um Bundle como parâmetro;
• O Bundle contém vários pares de
chave-valor contendo informações
como tipo de requisição, item que está
sendo comprado e aplicação que está
fazendo a requisição.
39. Como funciona
In-App Billing Requests: cada Bundle precisa ter uma chave
BILLING_REQUEST que especifica o tipo de requisição que está
sendo feita. São cinco tipos suportados:
In-App Billing
40. Como funciona
In-App Billing Responses: a resposta síncrona é um Bundle com
as seguintes chaves:
In-App Billing
As mensagens de resposta assíncronas são enviadas na forma de Broadcast
Intents e incluem as seguintes:
41. Como funciona
O intent ACTION_PURCHASE_STATE_CHANGED provê para a
sua aplicação detalhes de uma ou mais transações. Eis um
exemplo da string JSON que é enviada:
In-App Billing
42. Sequências de mensagens
Exemplos de requisições realizadas pela aplicação e respostas
que são enviadas pela aplicação Android Market.
In-App Billing
43. NFC (Near Field Communication)
Pacote android.nfc
Permite a comunicação entre dispositivos (iniciador e alvo) com
distância de centímetros. O alvo é uma tag RFID ou peer-to-peer.
É uma das tecnologias mais promissoras no mundo mobile.
Pagamento pelo celular
44. NFC (Near Field Communication)
Casos de Uso
Troca de informações
45. NFC (Near Field Communication)
Casos de Uso
Ingressos para shows
47. SIP (Session Initiation Protocol)
Pacote android.net.sip
Android provê uma API que permite a realização de chamadas
através do protocolo SIP. Pode ser usado para videochamadas
ou mensageiros instantâneos.
• Para desenvolver uma aplicação SIP, é necessário que o
dispositivo esteja com o Android 2.3 ou superior;
• SIP roda sobre uma conexão de dados, seja Wi-Fi ou 3G.
Não há como testar SIP em um AVD;
• Cada participante em uma aplicação que se comunica
por SIP deve possuir uma conta SIP. Existem muitos
provedores SIP que oferecem planos diversos.