Você está na página 1de 48

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
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


ANDROID 3.0

Visão geral e recursos do Android 3.0


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
Novos recursos para o Usuário
Novidades do Android 3.0

• Novo Teclado
• Manipulação de Textos
• Mais conectividade
• Aplicações-chave melhores
Novos recursos para o Usuário
Novidades do Android 3.0 Aplicações-chave foram aperfeiçoadas
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
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
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.
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.
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.


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).
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().
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).
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.
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.


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
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.
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.
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.
AndroidManifest.xml
Desenvolvendo para Tablets

Versão mínima do SDK: API Level 11 (Android 3.0)

Suportar apenas telas extra grandes


Gráficos e Animações

Property Animation e Renderscript


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
Como funciona
Property Animation Utilizando o framework Property Animation para fazer animações

Animação linear

Animação não-linear
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.
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.
Evaluators e Interpolators
Property Animation
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.
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.
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();
Múltiplas animações com AnimatorSet
Property Animation
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.


Declarando as Animações em XML
Property Animation
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
Tendências

Tendências do mundo mobile


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
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.
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.
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
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:
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
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
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


NFC (Near Field Communication)
Casos de Uso

Troca de informações
NFC (Near Field Communication)
Casos de Uso

Ingressos para shows


NFC (Near Field Communication)
Casos de Uso

Chaves
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.
What’s Your Message?
OBRIGADO!

Você também pode gostar