Você está na página 1de 127

Curso de Android Captulo 1 Leia Primeiro Como usar este material Bem vindo, Aluno!

! Voc est comeando o Curso de Programao para Celular e Tablet Android, criado por Bruno Nardini. O primeiro passo aprender como usar este material para melhor aproveitamento do contedo. As informaes a seguir so um padro para organizar o material e deix-lo mais prtico. No se preocupe em decorar esse padro, pois intuitivo e voc ir se acostumar automaticamente durante a utilizao das apresentaes. O fluxo da apresentao ser atravs do click do mouse na tela, ento a cada clique um texto novo ir aparecer, ou uma imagem, ou passar para o prximo passo, ou qualquer interao at chegar no final do captulo. Tome cuidado para no avanar sem ter visto todo o contedo da tela, ento use SEMPRE o click do mouse na tela para acompanhar o material. Que tal comear agora? Clique nesta tela! O padro para os textos deste material : Hiperlinks estaro sublinhados Partes importantes estaro enfatizadas em negrito Termos tcnicos estaro em itlico Esses podem estar juntos. Exemplo: O throw diferente do throws, cada um tem sua. Alm de a frase ser importante, throw e throws so termos tcnicos. Em alguns textos haver diferentes hiperlinks com diferentes propsitos, os quais so: Links Internos So links para outros lugares do material. Exemplo: para pular ou voltar um captulo; fazer referncia a um material auxiliar como um cdigo; Informaes So informaes extras para completar o que foi dito. Exemplo: explicar a definio de um termo tcnico; dar exemplos do que foi explicado; uma curiosidade sobre o assunto; Avisos So avisos ou lembretes importantes. Exemplo: algo que voc no pode fazer; lembrar a definio que j foi avisado; reforar uma informao importante; Links Externos So links para contedos fora do material. Exemplo: referncia a sites; referncia a download; referncia a autores.

Est disponvel junto com material os exemplos utilizados na apresentao. No final de cada captulo voc poder fazer exerccios para fixar seus conhecimentos. Voc aprender fazer tambm avaliaes para testar o seu aprendizado. As avaliaes so importantes para tirar o certificado no final do curso. Siga a ordem exata de cada captulo, para que no se perca e prejudique seu aprendizado. O contedo foi feito de forma bem didtica e simples para que voc tenha o mximo de aproveito. Apesar de um material srio, alguns toques de humor foi acrescentado para descontrair um pouco, j que todo contedo passado por texto. Tudo deveria se tornar o mais simples possvel, mas no simplificado (Albert Einstein) As dvidas em relao ao ambiente Brava Curso so respondidas pelo prprio Help Desk da Brava Cursos. Bom Estudo ! Contedo Programtico Captulo 1 LEIA PRIMEIRO Como usar este material

Captulo 2 Conceitos e definies Introduo Verses Android API Level Android SDK

Captulo 3 Instalao Introduo IDE ADT

Captulo 4 Ol Mundo Ol Mundo AVD Emulando o Aplicativo

Captulo 5 Projeto Android Introduo Estrutura Principal Recursos Android Manifest

Projeto Eclipse

Captulo 6 Componentes Layout XML Paleta de Componentes Trabalhando com os Componentes

Captulo 7 Telas Activity Navegando entre Telas Contextos Ciclo de Vida

Captulo 8 Layout Layout Linear Layout Relativo Layout de Tabela Layout em Grade Layout Reaproveitvel

Captulo 9 Formulrios Campos de Texto Mensagem Seleo nica Seleo Mltipla Boto de Ativao Auto Complete Calendrio

Captulo 10 Imagens Drawable Imagem de Fundo Imagem no Boto Galeria de Imagens

Captulo 11 Jogos Parte 1 Thread Runnable Handler Criando o Jogo Desenhando um Objeto Criando um Objeto Personalizado

Captulo 12 Jogos Parte 2 Objeto Dinmico Ataque Meteoros Painel Classes de Controle

Captulo 13 Publicando seus Aplicativos e Jogos Google Play Ganhando Dinheiro Consideraes Finais

Captulo 2 Conceitos e Definies Introduo Voc est iniciando o Curso de Android, que ir capacit-lo para desenvolver aplicativos e jogos para celular e tablet. Android um sistema operacional mvel criado e mantido pela Google. Atualmente o mais usado em celulares e em tablets vendidos pelo mundo. Algumas funcionalidades do Android: Framework de Aplicao permitido reuso e substituio de componentes Java Virtual Machine (Dalvik) otimizado para dispositivos mveis Navegador integrado baseado no motor de cdigo aberto Webkit Grficos registrados e otimizados para bibliotecas personalizadas para grficos 2D; Grficos 3D baseado no OpenGL ES 1.0 (acelerao de hardware opcional) SQLite para estrutura de base de dados Suporte a mdia para udios, vdeos e os seguintes formatos de imagens: MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF Telefonia GSM (depende do hardware) Bluetooth, EDGE, 3G e WiFi (depende do hardware) Cmera, GPS, compass e acelermetro (depende do hardware) Rico ambiente de desenvolvimento

Cada verso do Android tm, desde a verso 1.5, nomes de sobremesas ou bolos (em ingls) e seguem uma lgica alfabtica.

Atualmente o Android est na verso 4, chamada de Ice Cream Sandwich.

API Level um nmero inteiro que identifica a verso da API do Framework lanada em uma determinada verso. A plataforma Android prov uma API do Framework que aplicativos podem usar para interagir com o sistema Android. A API do Framework consiste em: O core de pacotes e classes Uma lista de elementos XML e atributos para declaraes no arquivo manifest Uma lista de elementos XML e atributos para declaraes de acesso a recursos Uma lista de Intents Uma lista de permisses que aplicativos podem requerer

Android SDK (Software Development Kit) um kit de desenvolvimento para Android. Contm todas as ferramentas e bibliotecas necessrias para que o Desenvolvedor possa criar um aplicativo ou jogo para Android. O Android SDK possui algumas ferramentas importantes: SDK Manager Gerenciador de recursos do Android SDK. Nele voc pode escolher quais so os recursos que voc far download para seu Android SDK AVD Manager Gerenciador de simuladores de dispositivos com Android Android Tool Shell com comandos para projetos Android ADB Shell com comandos para comunicao com os dispositivos virtuais ou reais

Captulo 3 Instalao Introduo Iremos agora preparar o ambiente de desenvolvimento, instalando e configurando as ferramentas necessrias para comearmos a programar para Android. A instalao e configurao semelhante para qualquer um desses sistemas operacionais: Linux, MacOS e Windows.

Para comearmos, voc precisar fazer o download do programa Eclipse: http://www.eclipse.org/downloads/ Escolha o pacote: Eclipse IDE for Java Developers O Eclipse uma IDE (Ambiente Integrado de Desenvolvimento) que ser o programa que utilizaremos para programar. A instalao bem simples, basta descompactar o arquivo em um diretrio de sua preferncia. Em seguida s executar o Eclipse. necessria a instalao do Java antes de usar o Eclipse.

Ferramenta de Desenvolvimento do Android, ou no ingls Android Development Tools (ADT), um plugin para o Eclipse que lhe oferece um poderoso ambiente de desenvolvimento integrado para o Android. O ADT recomendado pela prpria Google como a melhor maneira e a mais rpida para se desenvolver para o Android. Vamos agora instalar o ADT no Eclipse. Com o Eclipse abertom v ao menu Help >> Install New Software. Conforme mostra a imagem abaixo:

Na janela que ser exibida, clique no boto Add... Na nova janela, preencha com as seguintes informaes: Name: Android ADT (Ou qualquer um a sua escolha) Lacation: https://dl-ssl.google.com/android/eclipse/

Clique em OK

Em seguida clique no boto Next > A instalao ir demorar de acordo com a sua conexo com a Internet. Depois do download e antes da instalao, o Android ir exibir uma notificao de confiabilidade do plugin, s clicar em OK e continuar. Este plugin foi desenvolvido e mantido pela prpria Google, ento voc tem a garantia Google de confiabilidade. Ao terminar a instalao, reinicie o Eclipse. Ao reiniciar o Eclipse, uma janela ser exibida, conforme imagem abaixo:

A instalao do Android SDK de forma manual bem simples, basta fazer o download do mesmo e descompact-lo em um diretrio de sua preferncia. O download pode ser feito no prprio site do Android: http://developer.android.com/sdk

Mas sugiro que escolha a instalao automtica mesmo. Depois de instalado o ADT e o SDK, seu Eclipse ganhar a toolbar do Android, semelhante a imagem abaixo:

Clique no primeiro boto. Se deixar o mouse em cima do boto ir aparecer o texto Opens the Android SDK Manager. O Android SDK Manager gerencia todos os recursos instalados em seu SDK. A janela do Android SDK Manager semelhante imagem abaixo:

Os seguintes componentes precisam ser instalados: Tools: Android SDK Tools Android SDK Platform-tools

Android 3.0 (API 11) SDK Platform

Android SDK 2.1 (API 7) SDK Platform

No h problemas em instalar outros componentes, pode instalar todos que quiser, mas somente estes citados que sero usados neste curso. Ao selecionar os componentes, clique no boto Install X Packages (Onde X o nmero de componentes selecionados). Na tela seguinte, selecione Accept All, para aceitar todas as licenas, depois clique no boto Install. Assim sero instalados os componentes. O seu ambiente de desenvolvimento para Android agora est pronto! No prximo captulo iremos fazer nosso primeiro aplicativo. Captulo 4 Ol Mundo

Curiosidade Na rea de TI, quando vamos criar nosso primeiro programa em uma linguagem que estamos aprendendo, ns damos o nome de Ol Mundo, do ingls Hello World.

Na prxima janela voc escolher a verso mnima do Android que seu Aplicativo poder ser instalado. Ateno: Esta deciso importante para seu aplicativo, pois quanto menor a verso, maior ser a compatibilidade, ou seja, maior nmero de dispositivos ir suportar seu aplicativo. Se voc escolher a verso 3, dispositivos com Android na verso 2.1 ou 2.3, por exemplo, no podero executar seu aplicativo. Mas dispositivos com Android na verso acima, como o 4, por exemplo, podero execut-lo. Porm, se voc escolher verses antigas, voc no poder usar recursos novos que esto disponveis somente em verses mais novas. Por isso muito importante voc escolher a verso que mais se adequa ao seu aplicativo. Como iremos desenvolver um aplicativo simples, iremos inicialmente escolher a verso 2.1 para nosso aplicativo, que a verso que abrange mais de 95% dos dispositivos fabricados.

Pronto! Seu projeto foi criado! E deve ficar assim:

Agora, vamos testar o aplicativo no dispositivo, vamos criar um AVD para isso...

AVD uma sigla para Android Virtual Device, que no portugus significa Dispositivo Virtual Android. O AVD um gerenciador de simuladores de celular e tablet, como ele voc pode simular qualquer dispositivo com qualquer verso do Android. Ento vamos agora criar um novo simulador para executar nosso primeiro aplicativo. Clique no boto do AVD Manager da Toolbar do Android. Ao deixar o mouse em cima do boto aparece a descrio Opens the Android VirtualDevice Manager.

Clique no boto New... para criar um novo AVD.

Clique no boto Create AVD. Agora o AVD Manager est da seguinte forma:

Selecione o AVD avd21 e clique no boto Start...

Na nova janela clique no boto Launch.

O simulador ser carregado, costuma demorar um pouco at que ele carregue por completo.

Agora vamos executar o aplicativo Ol Mundo no simulador (AVD) que criamos.

Como s existe um dispositivo iniciado, que o simulador aberto, o aplicativo poder ser executado direto nele. Porm, o Eclipse pode te questionar qual dispositivo deseja executar o aplicativo, principalmente se houver mais de um iniciado. A janela para seleo do dispositivo esta:

S clicar no boto OK para continuar.

Note que no foi preciso digitar nenhuma linha de cdigo para criar o aplicativo e execut-lo. Bem simples e prtico. O aplicativo ainda no faz nada, mas ainda estamos no comeo do curso, ento fique calmo que iremos ainda programar funcionalidades para deixar o aplicativo interativo com o usurio. Curiosidade Se voc possui um celular ou um tablet com Android, voc pode executar seus aplicativos direto nele, sem precisar usar o simulador (AVD), basta plugar seu dispositivo no computador via USB, e executar o projeto da mesma forma que fizemos antes. No final do curso ser ensinado como disponibilizar o aplicativo no Google Play. Captulo 5 Projeto Android Introduo Antes de comear o desenvolvimento preciso entender a estrutura dos projetos para Android. Todo aplicativo ou jogo deve seguir uma estrutura padro para que funcione no Android. Iremos abordar de forma resumida e direta a estrutura dos projetos para Android, para voc se familiarizar com este ambiente, mas voc ir se acostumar conforme for criando seus projetos durante o curso, ento no se preocupe em decorar, somente em entender o contedo passado neste captulo.

Todo projeto deve seguir a seguinte estrutura:

A pasta res (Resources, em ingls) o diretrio que tem o objetivo de armazenar os recursos do projeto. Veremos todos seus subdiretrios e suas finalidades.

As imagens por padro so colocadas no diretrio drawable, que sero usadas em qualquer dispositivo. Caso voc queira colocar a mesma imagem em diferentes resolues, j que seu aplicativo pode se executado em diferentes dispositivos com diferentes resolues, voc separa estes arquivos nos respectivos diretrios drawable de resoluo. A imagem deve conter o mesmo nome para o Android saber que a mesma imagem. O diretrio layout contm os XMLs das telas do projeto. Cada tela possui um XML correspondente a definio dos componentes que compe a tela. Estes layouts tambm servem para layout no s de tela, mas como de outros componentes, como um ListView, por exemplo. Abordaremos com detalhes este diretrio nos prximos captulos. O diretrio values armazenam estilos e textos.

Os estilos so propriedades padres para componentes com o mesmo layout. Seria semelhante ao CSS no desenvolvimento WEB. Os textos so Strings armazenados em XML, para internalizar seu projeto. Voc pode colocar um padro para cada linguagem (portugus, ingls, francs, espanhol, entre outros), e o seu aplicativo assume os textos da linguagem definida no dispositivo.

O arquivo AndroidManifest.xml contm as configuraes essenciais sobre seu aplicativo para o sistema Android. So informaes que o Android necessita antes que ele possa executar qualquer cdigo do seu aplicativo. Entre outras configuraes, esto presentes: O nome do pacote Java para o aplicativo. O nome do pacote server como um identificador nico. Descreve os componentes do aplicativo. Os activities, services, broacast receives, e content providers que compe o aplicativo. Determina quais os processos hospedar os componentes do aplicativo. Declara quais as permisses que o aplicativo precisa acessar do dispositivo. Declara quais as permisses que outros aplicativos so requeridas para interagir com seu aplicativo. Declara a verso mnima da API do Android que o aplicativo requer. Lista as bibliotecas que o aplicativo precisa referenciar.

Abordaremos melhor o AndroidManifest.xml de acordo com os projetos que iremos fazer durante o curso.

Como estamos usando o Eclipse para desenvolver os projetos, voc precisa tambm entender como funciona o projeto Android dentro dele.

O diretrio gen de uso exclusivo do eclipse e voc no deve se preocupar com ele. Ele modifica o contedo de acordo com a compilao do projeto. O diretrio bin fica a compilao do projeto, onde gerado o arquivo *.apk para ser instalado no Android, mas esta instalao feita automaticamente pelo Eclipse. O arquivo .classpath contm as referncias para as bibliotecas utilizadas pelo projeto e se elas devem ser exportadas para o projeto compilado. O arquivo projects.properties contm as propriedades do projeto, como por exemplo, a API do SDK utilizada para o desenvolvimento do projeto.

Voc j aprendeu como a estrutura do projeto deve seguir, no captulo anterior tambm aprendeu a criar e executar o projeto no Android, agora voc est preparado para comear a desenvolver. Captulo 6 Projeto Android Introduo Voc ir agora conhecer os componentes padres do Android para desenhar as telas. Aprenderemos como e quando us-los em seus aplicativos. Iremos utilizar neste captulo o projeto Ola Mundo criado no captulo 4.

Como vimos no captulo anterior, o diretrio ../res/layout/ contm os XMLs com os layouts do projeto. O Eclipse automaticamente j cria o arquivo main.xml neste diretrio. Veja a estrutura j existente:

Um clique-duplo no main.xml para abri-lo.

O Eclipse abrir o arquivo da seguinte maneira:

Voc deve ter notado que ao adicionar o texto, somente foi possvel adicionar em baixo ou em cima do boto, no sendo possvel colocar ao lado. Isso se deve ao fato de estarmos usando o LinearLayout na orientao vertical. Vamos agora alterar o texto dos componentes adicionados. H duas maneiras de fazer isso, pelo modo grfico ou direto no cdigo pelo editor XML. Para aprendermos das duas formas, iremos trocar o texto do boto pelo modo grfico e do texto direto no cdigo.

E no modo grfico ficar assim:

Se voc executar o projeto ver que o aplicativo no Android ter a tela agora semelhante a tela que voc desenhou. Porm, o boto ainda no executa nenhuma ao... ... vamos ento adicionar uma ao a este boto. Primeiro vamos editar o identificador dos nossos componentes para fcil identificao no cdigo fonte. Na edio de XML, mude os atributos android:id do boto e do texto, respectivamente, para os identificadores @+id/btnMsg e @+id/txtMsg.

Agora vamos executar o nosso aplicativo!

Seu aplicativo criou vida!

Neste captulo voc aprendeu sobre os componentes do Android e os primeiros passos para desenhar uma tela e codificar suas aes. No prximo captulo entraremos a fundo sobre a codificao das telas. Captulo 7 Telas Introduo AS telas no Android so tratadas com o nome de Activity (Atividade). Neste captulo iremos ver como trabalhar com detalhes de seu comportamento e como trabalhar com as Activities.

Uma Activity um componente do aplicativo que fornece uma tela com a qual os usurios podem interagir, a fim de fazer algo, como discar o telefone, tirar uma foto, enviar um e-mail ou visualizar um mapa. J vimos no captulo anterior como fazemos para desenhar uma tela, atribuindo componentes e definindo suas propriedades, tudo atravs do Layout XML. Vimos tambm como codificar essa tela para executar uma ao. Mas no vimos ainda como o XML e o cdigo esto conectados.

Toda Activity deve ter como superclasse a classe Activity. Algumas Activities podem ser herdadas de outras classes, como a ListActivity, que j possuem como superclasse a classe Activity.

Note agora que foi sobrescrito o mtodo onCreate(Bundle savedInstanceState) da superclasse Activity. Comoo prprio comentrio explica, esse mtodo chamado quando a Activity criada pela primeira vez. Na linha 15 definido o Layout XML que a Activity ir usar para desenhar a tela. Foi passado para o mtodo setContentView(View view) o layout main.xml. Para toda Activity criada necessrio informar ao Android Manifest da sua existncia, caso contrrio o projeto no ter permisso para execut-la. Abra o arquivo AndroidManifest.xml.

Clique na aba Application.

Iremos agora criar mais uma tela para voc entender melhor essa referncia entre cdigo fonte e Layout XML, assim como aprender a fazer a navegao entre elas.

Para este captulo crie um novo projeto Android com os seguintes dados:

Com o projeto criado, ele ter a seguinte estrutura no Package Explorer:

Primeiro vamos criar o Layout XML das Activities do nosso projeto.

Repita o processo para criar os layouts egito.xml e fencia.xml. Seu projeto ficar com a seguinte estrutura:

Agora vamos adicionar alguns componentes nos layouts criados. Os seguintes componentes devem ser adicionados nas seguintes telas...

Os atributos para cada componente so:

Agora vamos criar o cdigo fonte para as Activities.

Repita o mesmo procedimento para as classes EgitoActivity e FeniciaActivity. No se esquea de associar com seus respectivos Layouts XML. Em seguida vamos adicionar a referncia das Activities no Android Manifest. Abra o AndroidManifest.xml, v na Aba Application, no grupo Application Nodes clique no boto Add...

Selecione o item Activity e clique no boto OK.

Preencha o campo Name com o valor .MapaActivity (no esquea do ponto antes da classe, que faz referncia ao pacote principal do projeto).

Repita o mesmo procedimento para as classes EgitoActivity e FeniciaActivity. Em seguida vamos codificar a navegao entre as telas.

Na linha 24 foi instanciado um objeto da classe Intent. Um Intent uma descrio abstrata de uma operao a ser executada. O Intent fornece uma facilidade para realizao em tempo de execuo de uma ligao entre o cdigo em diferentes aplicaes, onde pode ser transferidas informaes entre Activities.

O mesmo feito na linha 31 e 32 para MapaActivity. Agora faremos o cdigo do MapaActivity.

Agora faremos o cdigo do EgitoActivity.

O cdigo semelhante ao que j fizemos.

No evento do boto Voltar, finalizamos a tela atual, como j fizemos no MapaActivity. No evento do boto Seguir ns chamamos a tela FeniciaActivity e em seguida finalizamos a tela atual. Na tela FeniciaActivity no h codificao extra, simplesmente ser exibido a mensagem que j definimos no fencia.xml. Vamos executar o projeto?

O usurio sempre ter a opo de fechar a tela atual utilizando o boto padro dos dispositivos Android. Veremos agora a parte do cdigo que deixamos para o prximo tpico.

Contextos so informaes do ambiente da aplicao. O Android possui dois contextos:

Activity Context Contexto de uma tela. Application Context Contexto do Aplicativo.

Toda classe que representa um desses contextos implementam a interface Context.

O contexto nos til quando precisamos de alguma informao da aplicao, como buscar o diretrio em que o aplicativo foi instalado, por exemplo.

As Activities possuem um ciclo de vida da sua criao at a sua destruio. importante entender esse ciclo para entender seu funcionamento.

Voc j implementou o mtodo onCreate() da Activity, os demais so implementados da mesma forma, o que difere o momento em que cada mtodo invocado pelo aplicativo, como visto no fluxo que acabou de ver.

Neste captulo voc aprendeu a criar diferentes telas para seu aplicativo e como interagir entre elas. Aprendeu que a ela tratada pelo Android como uma Activity, apredeu seu ciclo de vida e sobre o contexto do Android. Aprendendo os conceitos de forma correta, voc perceber que o desenvolvimento para Android bem mais simples do que parece, e at mesmo divertido. Espero que esteja gostando! Vamos ento para o prximo captulo. Captulo 8 Layout Introduo No captulo anterior vimos como funciona as telas do Android e utilizamos vrias vezes o Layout Linear (LinearLayout) para organizar os componentes na tela. Neste captulo iremos ver sobre este e outros layouts do Android, para voc aprender diferentes formas de organizar os componentes.

O Layout Linear (LinearLayout) um Grupo de Viso (ViewGrupo) que disponibiliza os componentes em uma direo linear, seja horizontal ou vertical. Voc deve ser cauteloso ao uso excessivo do LinearLayout. Se voc estiver usando vrios em uma s tela, talvez voc deva considerar em usar o Layout Relativo. Crie um novo projeto Android com os seguintes dados:

Vamos analisar o XML: Existe o n principal LinearLayout que define sua orientao como vertical todos os ns filhos (neste caso possui dois) sero posicionados verticalmente. O primeiro n filho um outro LinearLayout que usa uma orientao horizontal e o segundo n filho um LinearLayout que usa a orientao vertical. Cada um desses LinearLayouts contm alguns componentes TextView, que so orientados de acordo com seus respectivos LinearLayout.

O Layout Relativo (RelativeLayout) um Grupo de Viso (ViewGroup) que disponibiliza cada componente em posies relativas. A posio de um componente pode ser especificado como em relao a elementos irmos (tal como para a esquerda de ou abaixo de um determinado componente) ou em posies relativas para a rea de um RelativeLayout (tais como alinhado com o fundo, esquerda do centro). Crie um novo projeto Android com os seguintes dados:

Vamos analisar o XML: Note que em cada um dos atributos android:layout_*, assim como layout_below, layout_alignParentRight e layout_toLeftOf. Quando usado o RelativeLayout, voc pode usar esses atributos para descrever como voc quer posicionar cada componente. Cada um desses atributos define um tipo diferente de posio relativa. Alguns atributos usam o ID de um componente para definir sua posio relativa. Por exemplo, se voc definiu que um boto ter margem esquerda de 20dp, voc alinha os demais botes com a mesma posio-esquerda deste primeiro boto, assim se voc mudar a margem esquerda para outro valor do primeiro boto, todos os demais botes iro acompanha-lo.

O Layout de Tabela (TableLayout) um Grupo de Viso (ViewGroup) que disponibiliza os componentes em linhas e colunas, ou seja, como uma tabela. Crie um novo projeto Android com os seguintes dados:

Vamos analisar o XML: Note como este se assemelha estrutura de uma tabela HTML. O elemento TableLayout como o elemento <table> do HTML. TableTow como o elemento <tr>. Mas, para as clulas, voc pode usar qualquer tipo de componente. Neste exemplo, um TextView usado para cada clula. Entre algumas linhas, existe tambm uma viso bsica, que usada para desenhar uma linha horizontal.

O Layout em Grade (GridLayout) um Grupo de Viso (ViewGroup) que disponibiliza os componentes em uma grade bidimensional, rolhvel. Os itens da grade so inseridos automaticamente no Layout usando um ListAdapter. Voc ir criar uma grade de imagens miniaturas. Quando uma imagem selecionada, uma mensagem ir exibir a posio da imagem. Crie um novo projeto Android com os seguintes dados:

Depois do layout main.xml associado classe HelloGridView, o mtodo setAdapter() define um adaptador genrico (ImageAdapter) como fonte para todos os itens a serem exibidos na grade. O Image Adapter criado no prximo passo. Para fazer algo quando um item da grade clicado, o mtodo setOnItemClickListener() recebe um novo AdapterView.OnItemClickListener. Esta instncia annima define o mtodo de calback do onItemClick() para exibir uma mensagem que informa a posio (baseado em zero) do item selecionado. Crie a classe ImageAdapter e edite seu contedo da seguinte forma:

Vamos analisar a classe ImageAdapter: Primeiro, esta implementao requer mtodos herdados do BaseAdapter. O construtor e o mtodo getCount() so auto-explicativos. Normalmente, getItem(int) deve retornar o objeto atual na posio especificada no adaptador, mas isto ignorado neste exemplo. Tambm, o mtodo getItemId(int) deve retornar o ID da linha do item, mas no usado neste exemplo. O primeiro mtodo necessrio o getView(). Este mtodo criar uma nova viso para cada imagem adicionada ao ImageAdapter. Quando este chamado, uma viso passada, que normalmente um objeto reciclado (deve ser chamado pelo menos uma vez), ento verificado se o objeto nulo. Se no for nulo, uma ImageView iniciada e configurada com as propriedades desejadas para a apresentao da imagem. Se a viso passada para o getView() no nulo, ento a imagem local inicializada com o objeto reciclado da viso. No final do mtodo getView(), a posio passada no mtodo usada para selecionar uma imagem do array mThumblds, que definido como um recurso de imagem para o ImageView. Tudo o que resta definir o array mThumblds de recursos drawable. O array mThumblds contm referncias s imagens do projeto que est disponvel no painel do aluno. Voc pode utilizar estas imagens ou escolher outras, bastando adicionar no diretrio res/drawable/.

No Android voc pode reaproveitar um layout dentro de vrios outros layouts. Desta forma, voc pode fazer cabealhos ou rodaps uma s vez e reutiliz-los em todas as suas telas, ou qualquer tipo de layout que se repita mais de uma vez. Crie um novo projeto Androide om os seguintes dados:

Clique no boto.

Neste captulo voc aprendeu a criar diferentes tipos de layouts para organizar os componentes de diferentes maneiras. Faa bom uso dos layouts no design de suas telas. Captulo 9 Formulrios Introduo H vrias formas de entrada de dados no Android, comumente usados em desenvolvimento para desktops ou Web, que so os componentes de formulrios. Neste captulo veremos como funcionam estes componentes no Android.

Para este captulo crie um novo projeto Android com os seguintes dados:

Os seguintes Activities devero ser criados com seus respectivos Layouts XML:

Inclua estes Activities no AndroidManifest.xml

A finalidade desta tela fazer que o usurio digite seu nome para exibir uma mensagem personalizada.

Usamos o mtodo getText() do EditText que o usurio ir digitar seu nome para pegar o valor digitado e adicionamos o valor, com um texto fixo concatenando no componente TextView para exibir ao usurio.

No exemplo anterior, se o usurio no digitar nenhum texto e clicar ir aparecer a mensagem Ol, !. Esta mensagem no amigvel ao usurio, pois esperamos que algum nome seja digitado. Para isso teremos que criar uma validao. A validao ir notificar ao usurio que o campo Nome de preenchimento obrigatrio. Esta notificao ser feita atravs de uma mensagem. Utilizaremos ento o recurso padro do Android de mensagens.

Utilizamos a classe Toast para exibir a mensagem ao usurio. Foi utilizado o mtodo makeTest() para criar a mensagem e o mtodo show() para exibi-la.

Execute o projeto e veja o comportamento da seleo nica. Como o prprio nome do tpico sugere este componente deve ser usado para quando o usurio quiser selecionar uma opo de uma lista.

Execute o projeto e veja o comportamento da seleo mltipla. Como o prprio nome deste tpico sugere este componente deve ser usado quando o usurio quiser selecionar uma ou mais opes de uma lista.

Execute o projeto e veja o comportamento do boto de ativao. O boto de ativao deve ser usado quando a opo possui somente duas escolhas, que normalmente so para ativar ou desativar alguma funcionalidade do seu aplicativo ou do Android.

Crie um novo projeto Android com os seguintes dados:

No cdigo anterior foi criado um novo ArrayAdapter e inicializado com o layout list_item.xml para cada item a lista do array PAISES (definido no prximo passo). Em seguida o mtodo setAdapter() chamado para associar o ArrayAdapter com o componente AutoCompleteTextView para que o array popule a lista de sugestes.

Crie um novo projeto Android com os seguintes dados:

Neste captulo foi demonstrado que possvel trabalhar com componente de formulrios de forma bem simples, semelhante a outras plataformas de desenvolvimento em Java, como Desktop e WEB. Aproveite agora para criar um aplicativo utilizando o conhecimento obtido at agora. Seu limite sua criatividade, misture componentes, use-os de diferentes formas e se divirta. A prtica ir fixar o conhecimento. No se prenda aos exemplos criados aqui, faa outros da sua maneira, para absorver melhor o contedo. Utilize os captulos anteriores como consulta para relembrar o que j foi estudado. Depois continue o curso no prximo captulo. Captulo 10 Imagens Introduo Neste captulo iremos trabalhar com imagens de diversas formas, seja como imagem de fundo, em botes ou uma galeria. Para este captulo crie um novo projeto Android com os seguintes dados:

Pegue as imagens que esto no painel do aluno neste captulo e coloque no diretrio do projeto res/drawable. Caso o Eclipse tenha criado o diretrio res/drawable-mdpi, altere o nome para res/drawable, e delete os demais diretrios drawable se houver. Atualize o projeto.

Como j vimos, quando queremos armazenar uma imagem no nosso projeto, podemos armazen-la no diretrio res/drawable. Iremos ver agora como usar essas imagens.

No diretrio Drawable podemos criar imagens de forma programtica tambm, atravs do XML. Agora vamos criar um fundo gradiente e adicionar ao fundo da tela.

Vimos que da mesma forma que definimos uma imagem atravs do componente ImageView, tambm podemos alterar o fundo de outros componentes atravs do atributo android:background.

Tambm vimos que possvel criar desenhos atravs do XML e us-lo como imagem.

No Android podemos tambm personalizar os botes, com imagens diferentes para cada estado. Iremos colocar um boto com uma imagem normal e outra para quando for clicado.

Vimos que com o XML conseguimos definir uma imagem para o boto e outra para quando o boto for clicado.

Quando queremos exibir vrias imagens, mais do que cabe na tela, se torna interessante o uso de uma galeria para exibio dessas imagens. Iremos agora criar esta galeria.

Neste captulo voc aprendeu a trabalhar com imagens de diferentes formas. Imagens so recursos importantes no design de um aplicativo. Tenha cuidado com imagens grandes, pois os dispositivos dispem de pouca memria para process-los. Captulo 11 Jogos parte 1 Introduo Deste captulo em diante iremos aplicar todo o conhecimento obtido no curso em um jogo. Mesmo que voc no tenha interesse em jogos, voc obter conhecimentos importantes e colocar em prtica o que j aprendeu neste curso, reforando o conhecimento. Iremos comear com alguns conceitos que sero usados no desenvolvimento do jogo. Estes conceitos podem ser usado em qualquer aplicativo, mas citaremos o jogo apenas para no ter que ficar repetindo o tempo todo que serve tanto para jogos quanto para aplicativos.

Thread uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente. O Java implementa uma thread atravs da classes java.lang.Thread. O uso da thread importante para executar um processo que possa demorar sem travar o jogo. Quando voc inicia uma thread, o processo enviado ao sistema operacional (no nosso caso, o Android) e ele rodar em paralelo e independente do seu jogo. Seu jogo estar livre para continuar, pois ele no ir esperar a execuo da thread. Vamos imaginar o seguinte cenrio: Ao executar uma ao, voc precisa que seja executado 3 processos.

No jogo iremos usar threads para cada processo, pois um jogo deve ser dinmico e uma ao no pode ficar esperando o trmino de outra. No Android, h uma particularidade em relao s threads. Como se perde o controle da thread ao inci-la, uma thread no pode alterar os componentes de uma Activity, pois no h garantias de qual Activity est aberta ou se existe alguma aberta quando executado uma ao dentro da thread. Para que voc possa alterar um componente de uma Activity em uma thread, voc ter que executar a thread dentro do mtodo runOnUiThread() da Activity em questo. Este mtodo dar garantia que o componente s ser alterado se a Activity estiver disponvel para alterao.

No Java, para que voc possa rodar uma Thread, voc precisa de uma classe que implemente a interface Runnable. A interface Runnable possui apenas um mtodo abstrato, que o mtodo run(). Este mtodo onde estar o cdigo que ser executado ao iniciar a Thread. Voc ver na prtica o funcionamento do Runnable quando comearmos a codificar o jogo.

Assim como aplicativo perde o controle Thread assim que inicia, o inverso tambm acontece, a thread perde o controle da classe que a inicia. Porm, h uma forma de ambos se comunicarem, utilizando uma classe para enviar e receber mensagens. Essa classe chamamos de handler. Handler uma classe criada com o objetivo de uma classe se comunicar com a thread e viceversa. Vamos ver como funciona o fluxo desse processo.

Iremos criar um jogo simples, mas bem dinmico e o chamaremos de Guerra Espacial. Primeiro vamos definir como ser o jogo.

Agora que definimos como ser o jogo, vamos coloca-lo em prtica! Iremos criar o projeto do jogo da mesma forma que criamos todos os projetos at agora:

Pegue as imagens que esto no painel do aluno neste captulo e coloque no diretrio res/drawable. Caso o Eclipse tenha criado o diretrio res/drawable-mdpi, altere o nome para res/drawable, e delete os demais diretrios drawable se houver. Atualize o projeto. Primeiro iremos criar o layout do painel. Para ficar mais organizado, como iremos usar alguns componentes s para o painel, iremos criar um Layout XML s para o painel.

Agora iremos criar o layout para o jogo, utilizando o layout que criamos do painel.

Por ltimo, iremos definir que o jogo deve ser exibido somente com o dispositivo na horizontal, ou seja, no modo retrato. Abra o arquivo AndroidManifest.xml e v na aba Application.

Ns iremos desenhar programaticamente o tiro da nave, para que voc possa aprender a desenhar objetos no Android. O tiro ser um desenho, ento iremos coloca-lo no diretrio drawable como se fosse uma imagem qualquer do projeto.

No iremos colocar o tiro no layout, pois o tiro ser criado em tempo de execuo. Toda vez que for clicado no boto atirar, o tiro ser includo na tela. Mas em outro caso voc queira usar um desenho no seu layout, basta referenci-lo da mesma forma que voc faria com qualquer outra imagem drawable.

Para este jogo no podemos ficar presos aos componentes padres do Android, precisaremos criar um novo para que possamos definir propriedades e mtodos personalizados. Para isso iremos criar um componente prprio que daremos o nome de ObjetoDinamico. Crie o seguinte pacote (package): br.com.guerraespacial.objetos E adicione neste pacote a seguinte classe: ObjetoDinamico.java

Note que herdamos a classe ObjetoDinamico da classe ImageView, pois iremos reaproveitar suas propriedades e mtodos.

Por enquanto esa mudana no deve ter nenhum efeito, pois no fizemos nada diferente no ObjetoDinamico. Mas essa personalizao ser muito til quando iniciarmos a programao do jogo, pois poderemos definir as propriedades de mtodos para esta classe da nossa maneira.

Neste captulo voc aprendeu conceitos importantes para criar um jogo ou aplicativo com layout mais dinmico. Aprendeu tambm conceitos importantes sobre Thread e Handler para trabalhar com processos de forma assncrona. No prximo captulo iremos codificar as funcionalidades do jogo. Captulo 12 Jogos Parte 2 Introduo Neste captulo iremos programar as seguintes funcionalidades do jogo: Aes dos botes:

o Movimentar a nave para cima o Movimentar a nave para baixo o Nave atirar Criar meteoros aleatrios indo em direo nave Colises: o O tiro deve adicionar um ponto ao colidir com o meteoro e destru-lo o O meteoro deve remover uma vida ao colidir com a nave Quando a vida chegar a zero, o jogo deve ser finalizado

Iremos agora definir as propriedades e mtodos necessrios do ObjetoDinamico.

Nestes mtodos utilizamos a altura e a largura pr-definidas para quando o mtodo getWidth() e o getHeight() retornam o valor zero, uma vez que estes mtodos s possuem valor quando conseguem pegar a proporo da tela. O marcador objetoDestruido serve para marcar que o objeto deve ser destrudo. Ainda no pacote: br.com.curso.guerraespacial.objetos Vamos criar as seguintes classes: ObjetoHandler DestruirObjetoRunnable

Iremos criar agora as classes para que a nave possa atirar. Crie o pacote: br.com.curso.guerraespacial.tiro Neste pacote, crie as classes: Tiro, MoverTiroRunnable, TiroHandler, TiroRunnable

A classe TiroRunnable ir movimentar o tiro at chegar ao final da tela, depois ir remover o tiro da tela.

A classe TiroHandler um handler com as aes do tiro. A classe Colisao ser criada posteriormente.

A classe Tiro servir para criar o tiro e depois ir chamar a Thread para movimentar o tiro pela tela.

O Painel onde contabilizado e exibido a quantidade de vidas e pontos do jogo. A cada tiro que destri um meteoro acrescentado 1 ao ponto. A cada meteoro que atinge a nave subtrado 1 vida. O placar inicial de 3 vidas e 0 pontos.

O atributo jogoFinalizado um marcador para definir se o jogo est rodando ou se foi finalizado. Criamos mtodos para remover a vida, adicionar ponto e finalizar o jogo, que so

eventos do jogo controlados pelo Painel. Cada um desses eventos inicia uma nova Thread. Essas threads executam implementaes do Runnable que iremos criar agora.

A classe RemoverVidaRunnable ir remover 1 da vida. Caso a vida esteja com o valor zero, ser finalizado o jogo.

Esta classe ir exibir a mensagem de Jogo Finalizado e ir bloquear o jogo.

A classe MeteoroHandler contm mtodos para criao, movimentao e destruio do meteoros. Cada um desses eventos inicia um novo thread. Essas threads executam implementaes do Runnable que iremos criar agora.

O mtodo getRandomNumber() gera um nmero aleatrio de zero at o valor mximo passado por parmetro. Ao criar o meteoro, ser gerado um valor randmico de zero a 2, que ser usado para definir qual meteoro ser criado, depois ser definido um valor randmico para saber em qual altura ser criado o meteoro. Em seguida chamado o mtodo para remover o meteoro criado.

A classe MoverMeteoroRunnable ir mover e aumentar a margem direta do meteoro para movimenta-lo pela tela. Quando chegar ao final da tela, o meteoro ser destrudo.

A classe MeteoroRunnable servir como um loop infinito para criar os meteoros a cada 1,5 segundos. Caso o jogo tenha sido finalizado, ser encerrado o loop para parar a criao de meteoros.

Por fim, iremos criar as classes para controlar os eventos do jogo. As classes que iremos mencionar neste tpico pertencem ao pacote principal do jogo (br.com.curso.guerraespacial).

Na classe Nave criamos um mtodo para movimentar a nave para cima ou para baixo.

A classe Colisao servir para validar, a cada movimento de um objeto dinmico, se um objeto dinmico colidiu com outro. Se a nave colidiu com um meteoro, o meteoro ser destrudo e ser removido 1 da vida. Se um tiro colidiu com um meteoro, ambos sero destrudos e ser adicionado 1 ao ponto.

A classe GuerraEspacialActivity o Activity de nosso projeto, onde ocorrer o jogo. Nesta classe foi tratado os eventos dos botes de movimentar a nave, de atirar e de iniciar o jogo. No mtodo onDestroy() da Activity, ser finalizado o jogo para no ficar consumindo memria do dispositivo.

Captulo 13 Publicando seus Aplicativos e Jogos Para finalizar este curso, voc ir aprender agora como publicar seus aplicativos e jogos para outras pessoas e como ganhar dinheiro com eles.

Google Play o antigo Android Market Site oficial: https://play.google.com/store O Google Play permite aos desenvolvedores publicar e distribuir seus aplicativos diretamente para os usurios de celulares e tablets Android de forma muito fcil. O Google Play aberto a todos os desenvolvedores de aplicativos Android. Uma vez registrados, os desenvolvedores tm o controle completo sobre quando e como tornar suas aplicaes disponveis para os usurios. Os desenvolvedores podem facilmente gerenciar o seu portflio de aplicativos, ver informaes sobre downloads, classificao e comentrios. Os desenvolvedores tambm podem publicar atualizaes e novas verses de seus aplicativos.

Para se registrar, basta ir ao site de registro do Google Play: https://play.google.com/apps/publish/signup Antes de publicar um software no Google Play, voc deve fazer trs coisas: Criar um perfil de desenvolvedor; Concordar com o Contrato de Distribuio do Desenvolvedor; Pagar uma taxa de registro (U$ 25,00) com carto de crdito (usando o Google Checkout).

H duas formas de monetizar seus aplicativos e jogos Android: vendendo seu aplicativo ou parte do seu contedo. Voc pode publicar seu aplicativo ou jogo no Google Play para os usurios fazerem download de graa, ou pode cobrar um valor fixo para cada usurio. Cobrando um valor, o usurio s poder fazer o download de seu aplicativo ou jogo se pagar o valor estipulado por voc. O usurio ir pagar a Google que ir repassar este valor a voc. Os detalhes da negociao com o Google esto no Contrato de Distribuio do Desenvolvedor. A Google tambm oferece o Google Play In-app Billing, que um service do Google Play que lhe permite vender contedo digital em suas aplicaes. Voc pode usar o servio para vender uma ampla gama de contedos, incluindo contedo para download, tais como arquivos de mdia ou fotos e contedo virtual.

Quando voc usa este servio de faturamento para vender um item, o Google lida com todos os detalhes de check-out para que nunca a sua aplicao tem que processar diretamente todas as transaes financeiras. Google Play usa o servio de check-out mesmo que usado para compras de aplicativos, para que seus usurios possam experimentar um fluxo consistente de compra familiar.

Espero que voc tenha gostado do curso e tenha aproveitado todo seu contedo. Refaa todos os exerccios e depois faa a prova para adquirir seu certificado de concluso do curso. Me d um feedback se gostou ou no do curso, crticas e sugestes. At mais!