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!

Android Aula 5

  • 1.
    Erisvaldo Gadelha SaraivaJú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 parao 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 parao Usuário Novidades do Android 3.0 • Novo Teclado • Manipulação de Textos • Mais conectividade • Aplicações-chave melhores
  • 6.
    Novos recursos parao Usuário Novidades do Android 3.0 Aplicações-chave foram aperfeiçoadas
  • 7.
    Novos recursos parao 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 parao 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 deUI 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 aoJSON 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 parao 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 parao 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 desenvolvendouma 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.
  • 21.
    AndroidManifest.xml Desenvolvendo para Tablets Versão mínima do SDK: API Level 11 (Android 3.0) Suportar apenas telas extra grandes
  • 22.
    Gráficos e Animações Property Animation e Renderscript
  • 23.
    Property Animation XView 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õemo 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.
  • 27.
  • 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();
  • 31.
    Múltiplas animações comAnimatorSet Property Animation
  • 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.
  • 33.
    Declarando as Animaçõesem XML Property Animation
  • 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
  • 35.
    Tendências Tendências do mundo mobile
  • 36.
    Android Market ofereceserviç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 FieldCommunication) 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 FieldCommunication) Casos de Uso Troca de informações
  • 45.
    NFC (Near FieldCommunication) Casos de Uso Ingressos para shows
  • 46.
    NFC (Near FieldCommunication) Casos de Uso Chaves
  • 47.
    SIP (Session InitiationProtocol) 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.
  • 48.