01/09/2015
1
Desenvolvimento
de Aplicativos
para Android
Prof. Me. Cláudio L. V. Oliveira
prof.claudioluis@fatec.sp.gov.br
HISTÓRICO:
 Sistema operacional baseado em Linux
para dispositivos móveis;
 Desenvolvido pela Open Handset Alliance,
liderada pelo Google e outras empresas
 julho de 2005 a Google adquiriu a Android
Inc., uma pequena empresa em Palo Alto,
California, USA;
 Principal objetivo era o desenvolvimento
de uma plataforma de telefone móvel
baseado em Linux, com o objetivo de ser
uma plataforma flexível, aberta e de fácil
migração para os fabricantes.
Desenvolvimento de Aplicativos para
Android
01/09/2015
2
OPEN HANDSET
ALLIANCE (OHA):
Aliança de diversas
empresas com a
intenção de criar
padrões abertos
para telefonia móvel.
Desenvolvimento de Aplicativos para
Android
HTC DREAM:
Historicamente o primeiro
telefone comercialmente
disponível a executar o
sistema operacional
Android foi o HTC Dream,
lançado em 22 de outubro
de 2008.
Desenvolvimento de Aplicativos para
Android
01/09/2015
3
CARACTERÍSTICAS:
 Especificações para o Android são facilmente
distribuídas;
 Plataforma adaptada tanto para dispositivos
VGA maiores, gráficos 2D, bibliotecas gráficas
3D baseadas em OpenGL ES especificação 2.0
e os layouts mais tradicionais de smartphones.
Desenvolvimento de Aplicativos para
Android
CARACTERÍSTICAS:
 APIs disponíveis para envio de mensagens SMS e
MMS;
 Armazenamento de dados através do SQLite;
 Suporte adicional ao hardware permitindo utilizar a
câmera de vídeo, tela sensível ao toque, GPS,
acelerômetros e aceleração de gráficos 3D entre
outros recursos do aparelho.
Desenvolvimento de Aplicativos para
Android
01/09/2015
4
AMBIENTE PARA DESENVOLVIMENTO:
 ADT Eclipse
 Android Studio
http://developer.android.com/
Desenvolvimento de Aplicativos para
Android
ANDROID STUDIO:
Desenvolvimento de Aplicativos para
Android
01/09/2015
5
ADT ECLIPSE:
Desenvolvimento de Aplicativos para
Android
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (Android Studio):
 Após abrir o Android Studio, escolha a opção “Start a new
Android Studio project...”.
01/09/2015
6
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (Android Studio):
 Preencha as informações solicitadas:
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (Android Studio):
 Defina onde o aplicativo irá ser executado:
01/09/2015
7
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (Android Studio):
 Selecione o modelo de activity que será utilizado:
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (Android Studio):
 Na última janela defina o nome da Activity e pressione o
botão “Finish”:
01/09/2015
8
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (ADT Eclipse):
 Após abrir o ADT, escolha a opção “File”, “New” e depois
“Android Application Project”.
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (ADT Eclipse):
 Defina o nome do projeto e forneça as informações a
respeito do SDK.
01/09/2015
9
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (ADT Eclipse):
 Configure o Projeto, aceitando o valor padrão dos campos:
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (ADT Eclipse):
 Defina os ícones da aplicação:
01/09/2015
10
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (ADT Eclipse):
 Selecione Blank Activity:
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DO PROJETO (ADT Eclipse):
 Defina um nome para a Activity que será criada e pressione
o botão “Finish”:
01/09/2015
11
Desenvolvimento de Aplicativos para
Android
ANDROID SDK MANAGER:
 Possibilita a configuração/atualização do SDK a também a
definição das versões do Android a serem utilizadas no
desenvolvimento.
Desenvolvimento de Aplicativos para
Android
ANDROID VIRTUAL DEVICE MANAGER:
 O AVD Manager contém as máquinas virtuais que
representam os diversos dispositivos com Android no qual os
aplicativos serão executados.
01/09/2015
12
Desenvolvimento de Aplicativos para
Android
ESTRUTURA DO PROJETO:
 src: contém os arquivos com o código-
fonte do aplicativo;
 res: arquivos dos recursos utilizados no
projeto;
 res/layout: arquivos no formato XML
com o “desenho” das telas do
aplicativo;
 res/values: arquivos, também em XML,
que contém os valores, por exemplo,
textos a serem utilizados.
Desenvolvimento de Aplicativos para
Android
EXEMPLO DE ARQUIVO DE LAYOUT:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
01/09/2015
13
Desenvolvimento de Aplicativos para
Android
EXEMPLO DE ARQUIVO DE VALORES (string.xml):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Olá</string>
<string name="action_settings">Configurações</string>
<string name="hello_world">Olá Pessoal!</string>
</resources>
@string/hello_world
Desenvolvimento de Aplicativos para
Android
EXEMPLO DO CÓDIGO-FONTE EM JAVA:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// Continua...
01/09/2015
14
Desenvolvimento de Aplicativos para
Android
EXEMPLO DO CÓDIGO-FONTE EM JAVA:
// ... Continuação:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Desenvolvimento de Aplicativos para
Android
COMPILAÇÃO E EXECUÇÃO:
 Compile o aplicativo criado a partir da opção “Build” e “Make
Project”. Selecione no menu “Run”, “Run <nome do
projeto> e o dispositivo a ser emulado, por exemplo:
01/09/2015
15
Desenvolvimento de Aplicativos para
Android
EMULADOR:
 O emulador será exibido e o aplicativo será executado no
mesmo:
Desenvolvimento de Aplicativos para
Android
ADICIONANDO UMA IMAGEM:
 Copie a imagem a ser exibida dentro da pasta res, em
seguida coloque um objeto ImageView no arquivo de
layout:
01/09/2015
16
Desenvolvimento de Aplicativos para
Android
ADICIONANDO UMA IMAGEM:
 Selecione o recurso:
Desenvolvimento de Aplicativos para
Android
EXECUÇÃO DO APLICATIVO:
01/09/2015
17
Desenvolvimento de Aplicativos para
Android
ARQUITETURA:
Desenvolvimento de Aplicativos para
Android
CICLO DE VIDA DE UM
APLICATIVO:
01/09/2015
18
Desenvolvimento de Aplicativos para
Android
CÁLCULO DA IDADE:
 Vamos criar um novo projeto e definir
o layout da tela;
 O aplicativo deverá solicitar o ano de
nascimento ao usuário e, em seguida,
calcular e mostrar a idade da pessoa.
Desenvolvimento de Aplicativos para
Android
DEFINIÇÃO DO ID E TEXTO DOS OBJETOS :
 Nos objetos criados utilize o atributo id para definir o nome
(identificador) do objeto e o atributo text para definir o
texto a ser mostrado, por exemplo, considerando o botão
“Calcular”:
id: @+id/calcular
text: @string/bt_calcular
 O conteúdos indicados com @string serão definidos no
arquivo de recursos strings.xml, conforme mostrado no
próximo slide.
01/09/2015
19
Desenvolvimento de Aplicativos para
Android
ARQUIVO STRING.XML DO PROJETO:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Cálculo de Idade</string>
<string name="action_settings">Configurações</string>
<string name="tv_ano">
Digite o seu ano de nascimento:
</string>
<string name="bt_calcular">Calcular</string>
<string name="bt_limpar">Limpar</string>
<string name="txt_idade">A sua idade é %1$d anos.</string>
<string name="txt_erro">
ERRO: Preencha o ano de nascimento!
</string>
</resources>
Desenvolvimento de Aplicativos para
Android
STRING VAZIA:
 Precisamos inserir um método para verificar se uma
determinada String está vazia. Posteriormente, esse método
será utilizado para verificar se o campo ano de nascimento
foi preenchido:
public boolean eVazio(String texto) {
if (texto != null && texto.trim().length() > 0)
return false;
else
return true;
}
01/09/2015
20
Desenvolvimento de Aplicativos para
Android
EVENTOS:
 No evento onClick de um botão podemos definir o método
a ser chamado, por exemplo, para o botão de limpar
teremos:
public void limparClicked(View v) {
EditText etAnoNascimento =
(EditText) findViewById(R.id.anoNascimento);
etAnoNascimento.setText("");
}
@+id/anoNascimento
Desenvolvimento de Aplicativos para
Android
EVENTOS:
 O evento onClick do botão calcular será programado da
seguinte forma:
public void calcularClicked(View v) {
Context contexto = getApplicationContext();
EditText etAnoNascimento =
(EditText) findViewById(R.id.anoNascimento);
if (!eVazio(etAnoNascimento.getText().toString())) {
String txtIdade =
contexto.getString(R.string.txt_idade);
Time hoje = new Time(Time.getCurrentTimezone());
hoje.setToNow();
int anoAtual = hoje.year;
01/09/2015
21
Desenvolvimento de Aplicativos para
Android
EVENTOS:
int anoNascimento = new Integer(
etAnoNascimento.getText().toString());
int idade = anoAtual - anoNascimento;
Toast mensagem = Toast.makeText(contexto,
String.format(txtIdade, idade),
Toast.LENGTH_LONG);
mensagem.show();
}
else
{
String txtErro = contexto.getString(R.string.txt_erro);
Desenvolvimento de Aplicativos para
Android
EVENTOS:
Toast mensagem = Toast.makeText(contexto, txtErro,
Toast.LENGTH_LONG);
mensagem.show();
}
}
01/09/2015
22
Desenvolvimento de Aplicativos para
Android
EMULADOR:
 Após compilar e
executar o projeto o
emulador deverá
ser exibido e o
aplicativo será
executado no
mesmo:
Desenvolvimento de Aplicativos para
Android
BOTÕES DE RÁDIO:
 Crie um novo projeto chamado de “Quiz”, monte um layout
similar ao mostrado a seguir, utilizando os objetos
“RadioGroup” e “RadioButton”:
01/09/2015
23
Desenvolvimento de Aplicativos para
Android
CRIANDO UMA NOVA ACTIVITY:
 Vamos adicionar uma nova tela (Activity) à aplicação, para
isso, no menu “File” escolha “New”, “Other” e selecione
“Android Activity”.
Desenvolvimento de Aplicativos para
Android
CRIANDO UMA NOVA ACTIVITY:
 Monte uma nova questão com as respectivas alternativas na
tela que foi criada.
01/09/2015
24
Desenvolvimento de Aplicativos para
Android
ABRINDO A NOVA TELA:
 Na tela principal programe o evento On Click do botão do
botão Continuar.
public void continuarClicked(View v) {
Intent i = new Intent(MainActivity.this, Question2.class);
startActivity(i);
}
Desenvolvimento de Aplicativos para
Android
RETORNANDO A TELA ANTERIOR:
 Na nova tela programe o evento On Click do botão Voltar
para encerrar a Activity.
public void voltarClicked(View v) {
finish();
}
01/09/2015
25
Desenvolvimento de Aplicativos para
Android
OBTENDO O VALOR DE UM BOTÃO DE RÁDIO:
 O método isChecked irá retornar um valor booleano
indicando se determinado botão de rádio está selecionado
ou não, por exemplo:
public void continuarClicked(View v) {
RadioButton acerto =
(RadioButton) findViewById(R.id.radio4);
if (acerto.isChecked())
// Acertou...
else
// Errou...
Intent i = new Intent(MainActivity.this, Question2.class);
startActivity(i);
}
Desenvolvimento de Aplicativos para
Android
VALORES GLOBAIS:
 Em algumas situações é necessário que um determinado
valor esteja disponível entre várias Activities (telas). Neste
exemplo vamos definir uma classe para o placar do quiz:
public class Placar extends Application {
private int ponto;
public int getPonto() {
return ponto;
}
public void setPonto(int ponto) {
this.ponto = ponto;
}
}
01/09/2015
26
Desenvolvimento de Aplicativos para
Android
VALORES GLOBAIS:
 Em seguida, devemos registrar a classe no arquivo
AndroidManifest.xml, dentro do tag application:
android:name="com.example.quiz.Placar"
Desenvolvimento de Aplicativos para
Android
VALORES GLOBAIS:
 Em cada Activity (tela) devemos obter os dados a partir do
método getApplication:
Placar placar = (Placar) getApplication();
01/09/2015
27
Desenvolvimento de Aplicativos para
Android
VALORES GLOBAIS:
 O evento click no botão Continuar poderia ser implementado
desta maneira:
public void continuarClicked(View v) {
Placar placar = (Placar) getApplication();
RadioButton acerto =
(RadioButton) findViewById(R.id.radio4);
if (acerto.isChecked())
placar.setPonto(1);
else
placar.setPonto(0);
Intent i = new Intent(MainActivity.this, Question2.class);
startActivity(i);
}
Desenvolvimento de Aplicativos para
Android
CAIXA DE MENSAGEM:
 Na segunda tela do aplicativo vamos utilizar o botão
Continuar para mostrar uma caixa de mensagem contendo o
número de acertos do usuário:
AlertDialog.Builder mensagem = new AlertDialog.Builder(this);
mensagem.setTitle("Placar");
mensagem.setMessage("Você acertou " + placar.getPonto() +
" questões.");
mensagem.setNeutralButton("Ok", null);
mensagem.show();
01/09/2015
28
Desenvolvimento de Aplicativos para
Android
QUIZ MELHORADO:
 Crie um novo projeto com o nome “Quiz2” e monte um
layout contendo os objetos relacionados na figura a seguir:
Desenvolvimento de Aplicativos para
Android
CLASSE QUESTAO:
 Adicione uma classe chamada Questao ao projeto com os
seguintes atributos, desenvolva também os respectivos
setters e getters e o método construtor:
public class Questao {
private String texto;
private String alternativaA;
private String alternativaB;
private String alternativaC;
private String alternativaD;
private String alternativaE;
private int gabarito;
}
01/09/2015
29
Desenvolvimento de Aplicativos para
Android
ATRIBUTOS DO JOGO:
 Na classe MainActivity vamos definir os seguintes atributos:
public class MainActivity extends ActionBarActivity {
private TextView texto;
private RadioButton radio[];
private Questao questao[];
private int numero;
private int ponto;
// ...
}
Desenvolvimento de Aplicativos para
Android
OBJETOS UTILIZADOS:
 Em seguida, no método onCreate, vamos criar os objetos
associados aos componentes que foram desenhados na tela:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
texto = (TextView) findViewById(R.id.question);
radio = new RadioButton[5];
radio[0] = (RadioButton) findViewById(R.id.radio0);
radio[1] = (RadioButton) findViewById(R.id.radio1);
radio[2] = (RadioButton) findViewById(R.id.radio2);
radio[3] = (RadioButton) findViewById(R.id.radio3);
radio[4] = (RadioButton) findViewById(R.id.radio4);
// continua...
01/09/2015
30
Desenvolvimento de Aplicativos para
Android
CONTINUAÇÃO:
questao = new Questao[5];
questao[0] = new Questao("Batman é a identidade secreta
de", "Clark Kent", "Peter Parker", "Bruce Lee", "Tony
Stark", "Bruce Wayne", 4);
// Definir as outras quatro questões
numero = 0;
carregarQuestao();
ponto = 0;
}
Desenvolvimento de Aplicativos para
Android
EXIBIÇÃO DAS QUESTÕES:
 O método carregarQuestao irá obter uma questão do vetor e
mostrá-la na tela do aplicativo:
public void carregarQuestao() {
texto.setText(questao[numero].getTexto());
radio[0].setChecked(true);
radio[0].setText(questao[numero].getAlternativaA());
radio[1].setText(questao[numero].getAlternativaB());
radio[2].setText(questao[numero].getAlternativaC());
radio[3].setText(questao[numero].getAlternativaD());
radio[4].setText(questao[numero].getAlternativaE());
}
01/09/2015
31
Desenvolvimento de Aplicativos para
Android
EXIBIÇÃO DO RESULTADO FINAL:
 O método exibirPlacar irá mostrar uma caixa de mensagem
informando a quantidade de acertos do usuário:
public void exibirPlacar() {
AlertDialog.Builder mensagem =
new AlertDialog.Builder(this);
mensagem.setTitle("Placar");
mensagem.setMessage("Você acertou " +
ponto + " questões.");
mensagem.setNeutralButton("Ok", null);
mensagem.show();
}
Desenvolvimento de Aplicativos para
Android
AVANÇAR PARA A PRÓXIMA QUESTÃO:
 No click do botão continuar devemos verificar se o usuário
acertou a questão e, em seguida, exibir a próxima. Depois
da última questão o resultado deverá ser mostrado.
public void continuarClicked(View v) {
if (radio[questao[numero].getGabarito()].isChecked())
ponto++;
numero++;
if (numero == questao.length) {
exibirPlacar();
numero = 0;
ponto = 0;
}
carregarQuestao();
}
01/09/2015
32
Desenvolvimento de Aplicativos para
Android
BANCO DE DADOS:
 Crie um novo projeto, vamos chamá-lo de “Quiz3”. Monte
também um layout similar ao utilizado no exemplo anterior:
Desenvolvimento de Aplicativos para
Android
QUESTÕES:
 Adicione ao projeto a classe Questao, implementando
também os respectivos getters, setters e construtores:
public class Questao {
private int numero;
private String texto;
private String alternativaA;
private String alternativaB;
private String alternativaC;
private String alternativaD;
private String alternativaE;
private int gabarito;
}
01/09/2015
33
Desenvolvimento de Aplicativos para
Android
SQLITE3:
 Adicione uma classe nomeada “AcessoDados” que irá conter
os métodos necessários para criar, manipular e consultar os
dados:
public class AcessoDados extends SQLiteOpenHelper {
public AcessoDados(Context contexto) {
super(contexto, "quiz", null, 1);
// Apagar o banco quando for necessária alguma
// alteração na estrutura
// contexto.deleteDatabase("quiz");
}
// Continua...
Desenvolvimento de Aplicativos para
Android
CRIAÇÃO DA TABELA:
 O método onCreate será implementado na classe
“AcessoDados” e possui os comandos para criação da
tabela:
public void onCreate(SQLiteDatabase banco) {
String DDL = "CREATE TABLE questao (" +
"numero INTEGER PRIMARY KEY, texto TEXT, " +
"alternativaA TEXT, alternativaB TEXT, " +
"alternativaC TEXT, alternativaD TEXT, " +
"alternativaE TEXT, gabarito TEXT)";
banco.execSQL(DDL);
}
// Continua...
01/09/2015
34
Desenvolvimento de Aplicativos para
Android
ATUALIZAÇÃO DA TABELA:
 O método onUpgrade define como o banco irá se portar
quando for necessário mudar a estrutura da tabela:
public void onUpgrade(SQLiteDatabase banco, int oldVersion,
int newVersion) {
banco.execSQL("DROP TABLE IF EXISTS questao");
onCreate(banco);
}
// Continua...
Desenvolvimento de Aplicativos para
Android
INSERINDO UM REGISTRO:
public void inserir(Questao questao) {
SQLiteDatabase banco = this.getWritableDatabase();
ContentValues valores = new ContentValues();
valores.put("numero", questao.getNumero());
valores.put("texto", questao.getTexto());
valores.put("alternativaA", questao.getAlternativaA());
valores.put("alternativaB", questao.getAlternativaB());
valores.put("alternativaC", questao.getAlternativaC());
valores.put("alternativaD", questao.getAlternativaD());
valores.put("alternativaE", questao.getAlternativaE());
valores.put("gabarito", questao.getGabarito());
banco.insert("questao", null, valores);
banco.close();
}
// Continua...
01/09/2015
35
Desenvolvimento de Aplicativos para
Android
CONSULTA:
public Questao consultar (int numero) {
SQLiteDatabase banco = this.getReadableDatabase();
Cursor campo = banco.query("questao", new String[] {
"texto", "alternativaA", "alternativaB", "alternativaC",
"alternativaD", "alternativaE", "gabarito" }, "numero = " +
String.valueOf(numero), null, null, null, null, null);
if (campo != null)
campo.moveToFirst();
Questao questao = new Questao();
questao.setNumero(numero);
questao.setTexto(campo.getString(0));
questao.setAlternativaA(campo.getString(1));
questao.setAlternativaB(campo.getString(2));
// Continua...
Desenvolvimento de Aplicativos para
Android
CONSULTA:
questao.setAlternativaC(campo.getString(3));
questao.setAlternativaD(campo.getString(4));
questao.setAlternativaE(campo.getString(5));
questao.setGabarito(campo.getInt(6));
campo.close();
return questao;
}
// Continua...
01/09/2015
36
Desenvolvimento de Aplicativos para
Android
OBTENDO A QUANTIDADE DE REGISTROS:
public int getNumeroRegistros() {
String consulta = "SELECT * FROM questao";
SQLiteDatabase db = this.getReadableDatabase();
Cursor campo = db.rawQuery(consulta, null);
int numeroRegistros = campo.getCount();
campo.close();
return numeroRegistros;
}
Desenvolvimento de Aplicativos para
Android
TELA PRINCIPAL:
 Na classe MainActivity vamos definir os atributos:
public class MainActivity extends ActionBarActivity {
private AcessoDados banco;
private Questao questao;
private TextView texto;
private RadioButton radio[];
private int numero;
private int ponto;
// Continua...
01/09/2015
37
Desenvolvimento de Aplicativos para
Android
OBTENDO AS QUESTÕES:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banco = new AcessoDados(this);
texto = (TextView) findViewById(R.id.question);
radio = new RadioButton[5];
radio[0] = (RadioButton) findViewById(R.id.radio0);
radio[1] = (RadioButton) findViewById(R.id.radio1);
radio[2] = (RadioButton) findViewById(R.id.radio2);
radio[3] = (RadioButton) findViewById(R.id.radio3);
radio[4] = (RadioButton) findViewById(R.id.radio4);
carregarQuestoesIniciais();
numero = 1; ponto = 0;
carregarQuestao();
} // Continua...
Desenvolvimento de Aplicativos para
Android
CONJUNTO INICIAL DE QUESTÕES:
 Este método irá carregar um conjunto inicial de questões
quando a respectiva tabela estiver vazia:
public void carregarQuestoesIniciais() {
if (banco.getNumeroRegistros() == 0) {
banco.inserir(new Questao(1,
"Batman é a identidade secreta de", "Clark Kent",
"Peter Parker", "Bruce Lee", "Tony Stark",
"Bruce Wayne", 4));
// Inserir novas questões
}
}
// Continua...
01/09/2015
38
Desenvolvimento de Aplicativos para
Android
CARREGANDO UMA QUESTÃO:
 Este método irá obter uma questão armazenada no banco
de dados e exibí-la na tela principal:
public void carregarQuestao() {
questao = banco.consultar(numero);
texto.setText(questao.getTexto());
radio[0].setChecked(true);
radio[0].setText(questao.getAlternativaA());
radio[1].setText(questao.getAlternativaB());
radio[2].setText(questao.getAlternativaC());
radio[3].setText(questao.getAlternativaD());
radio[4].setText(questao.getAlternativaE());
}
// Continua...
Desenvolvimento de Aplicativos para
Android
MOSTRANDO A PRÓXIMA QUESTÃO:
 O click no botão Continuar irá mostrar a próxima questão ou
a caixa de mensagem com o resultado final:
public void continuarClicked(View v) {
if (radio[questao.getGabarito()].isChecked())
ponto++;
numero++;
if (numero > banco.getNumeroRegistros()) {
exibirPlacar();
numero = 1;
ponto = 0;
}
carregarQuestao();
}
// Continua...
01/09/2015
39
Desenvolvimento de Aplicativos para
Android
RESULTADO FINAL:
 Este método mostra uma caixa de mensagem com o total de
acertos obtidos pelo usuário:
public void exibirPlacar() {
AlertDialog.Builder mensagem =
new AlertDialog.Builder(this);
mensagem.setTitle("Placar");
mensagem.setMessage("Você acertou " + ponto +
" questões.");
mensagem.setNeutralButton("Ok", null);
mensagem.show();
}
Desenvolvimento de Aplicativos para
Android
TOUCHSCREEN:
 Neste próximo projeto vamos trabalhar com os gestos
reconhecidos pela tela de toque. Após criar o projeto, como
o nome “StarTrekThemes”, adicione apenas uma TextView e
uma ImageView:
01/09/2015
40
Desenvolvimento de Aplicativos para
Android
IMAGENS:
 Copie cinco imagens para a pasta
res/drawable-mdpi, conforme mostrado
na figura ao lado:
Desenvolvimento de Aplicativos para
Android
ADICIONANDO O SUPORTE AO TOUCHSCREEN:
 Na classe MainActivity adicione as interfaces
GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener:
import android.support.v4.view.GestureDetectorCompat;
import android.view.MotionEvent;
import android.view.GestureDetector;
public class MainActivity extends ActionBarActivity
implements GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener {
private GestureDetectorCompat detector;
private TextView mensagem;
private ImageView imagem;
private int numero;
01/09/2015
41
Desenvolvimento de Aplicativos para
Android
RECURSOS:
 Também na classe MainActivity crie um vetor para os textos
e e outro para os recursos de imagens que serão usados no
aplicativo, por exemplo:
private String[] textos = {
"Star Trek: The Original Series (1966-1969)",
"Star Trek: The Next Generarion (1987-1994)",
"Star Trek: Deep Space Nine (1993-1999)",
"Star Trek: Voyager (1995-2001)",
"Star Trek: Enterprise (2001-2005)"};
private int[] imagens = {R.drawable.tos, R.drawable.tng,
R.drawable.ds9, R.drawable.voyager, R.drawable.enterprise};
Desenvolvimento de Aplicativos para
Android
CARREGANDO OS RECURSOS:
 Acrescente o código a seguir no método onCreate:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.detector = new GestureDetectorCompat(this,this);
detector.setOnDoubleTapListener(this);
mensagem = (TextView) findViewById(R.id.mensagem);
imagem = (ImageView) findViewById(R.id.imagem);
numero = 0;
mensagem.setText(textos[numero]);
imagem.setImageResource(imagens[numero]);
}
01/09/2015
42
Desenvolvimento de Aplicativos para
Android
HABILITANDO A DETECÇÃO DE GESTOS:
 No método onTounchEvent devemos habilitar a detecção
dos gestos adicionando o objeto detector:
public boolean onTouchEvent(MotionEvent event) {
this.detector.onTouchEvent(event);
// Be sure to call the superclass implementation
return super.onTouchEvent(event);
}
Desenvolvimento de Aplicativos para
Android
DETECÇÃO DE GESTOS - FLING:
 O método onFling será usado para exibir a imagem seguinte
ou a anterior, dependendo do sentido do movimento:
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
if (velocityX < 0) {
numero++;
if (numero >= imagens.length)
numero = 0;
}
else if (velocityX > 0) {
numero--;
if (numero < 0)
numero = imagens.length - 1;
} // Continua...
01/09/2015
43
Desenvolvimento de Aplicativos para
Android
DETECÇÃO DE GESTOS - FLING:
 Concluindo o método onFling mostramos a nova imagem:
public boolean onFling(MotionEvent e1,
MotionEvent e2, float velocityX,
float velocityY) {
// ...
mensagem.setText(textos[numero]);
imagem.setImageResource(
imagens[numero]);
return false;
}
Desenvolvimento de Aplicativos para
Android
ARQUIVOS DE MÍDIA:
 Vamos acrescentar ao nosso exemplo
a possibilidade de tocar a música
tema de cada uma das séries. Dentro
da pasta res, crie uma pasta chamada
raw e copie os arquivos de mídia para
lá:
01/09/2015
44
Desenvolvimento de Aplicativos para
Android
MEDIA PLAYER:
 A classe MediaPlayer é utilizada para reproduzir arquivos de
mídia em diversos formatos. Declare um novo atributo para
a classe MainActivity, assim como um vetor contendo os
recursos de som:
private MediaPlayer player;
private int[] sons = {R.raw.tos, R.raw.tng,
R.raw.ds9, R.raw.voyager, R.raw.enterprise};
Desenvolvimento de Aplicativos para
Android
PLAYING:
 Quando o usuário realizar o gesto Double Tap o tema
associado irá ser executado, por exemplo:
public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
if (player == null || !player.isPlaying()) {
player = MediaPlayer.create(MainActivity.this,
sons[numero]);
player.start();
}
return false;
}
01/09/2015
45
Desenvolvimento de Aplicativos para
Android
STOPING:
 Quando o usuário mudar a imagem a música em execução
deverá ser parada. Desta forma, no início do método onFling
adicione o código a seguir:
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
if (player != null && player.isPlaying()) {
player.stop();
}
// Continua...
}
Desenvolvimento de Aplicativos para
Android
ENCERRAMENTO DO APLICATIVO:
 Quando o usuário encerrar o aplicativo, se houver alguma
música em execução, a mesma deverá ser parada.
public void onStop() {
if ((player != null) && (player.isPlaying()))
player.stop();
super.onStop();
}
01/09/2015
46
Desenvolvimento de Aplicativos para
Android
USO DE CANVAS:
 Neste exemplo vamos
abordar o conceito de
Canvas que permite
que realizemos os
nossos próprios
desenhos.
 Crie um novo projeto,
coloque o nome de
“Quadrados” e
adicione uma nova
classe chamada
“Desenhar”:
Desenvolvimento de Aplicativos para
Android
USO DE CANVAS:
public class Desenhar extends View {
private Paint desenhar = new Paint();
public Desenhar(Context contexto) {
super(contexto);
}
@Override
public void onDraw(Canvas canvas) {
desenhar.setColor(Color.BLACK);
canvas.drawRect(30, 30, 80, 80, desenhar);
desenhar.setColor(Color.RED);
canvas.drawRect(33, 33, 77, 77, desenhar);
}
}
01/09/2015
47
Desenvolvimento de Aplicativos para
Android
ALTERAÇÃO DA MAINACTIVITY:
public class MainActivity extends ActionBarActivity {
private Desenhar desenhar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
desenhar = new Desenhar(this);
setContentView(desenhar);
}
// Demais métodos implementados
}
Desenvolvimento de Aplicativos para
Android
EMULADOR:
01/09/2015
48
Desenvolvimento de Aplicativos para
Android
RECURSO DE IMAGEM:
 Copie a imagem que deverá ser
exibida para a pasta
/res/drawable-mdpi:
Desenvolvimento de Aplicativos para
Android
EXIBIÇÃO DE IMAGENS:
 A partir da classe “Desenhar”, usada no exemplo anterior,
vamos alterá-la para que realize a exibição de uma imagem:
public class Desenhar extends View{
private Random random;
private Bitmap figura;
public Desenhar(Context contexto) {
super(contexto);
random = new Random();
figura = BitmapFactory.decodeResource(getResources(),
R.drawable.bola);
}
// Continua...
01/09/2015
49
Desenvolvimento de Aplicativos para
Android
EXIBIÇÃO DE IMAGENS:
// Continuação...
@Override
public void onDraw(Canvas canvas) {
canvas.drawBitmap(figura,
random.nextInt(canvas.getWidth()),
random.nextInt(canvas.getHeight()), null);
}
}
Desenvolvimento de Aplicativos para
Android
TIMER:
 No método onCreate da MainActivity vamos criar um timer
que irá alterar a posição da imagem a cada meio segundo:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
desenhar = new Desenhar(this);
setContentView(desenhar);
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
desenhar.postInvalidate();
}
}, 0, 500);
}
01/09/2015
50
Desenvolvimento de Aplicativos para
Android
EMULADOR:
Desenvolvimento de Aplicativos para
Android
DETECÇÃO DE GESTOS EM CANVAS:
 Neste exemplo vamos controlar o movimento de um objeto
na tela a partir dos gestos realizados pelo usuário. Crie um
projeto chamado “AnimacaoGestos” e adicione uma classe
chamada “Desenhar”.
public class MainActivity extends ActionBarActivity {
private Desenhar desenhar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
desenhar = new Desenhar(this);
this.setContentView(desenhar);
}
01/09/2015
51
Desenvolvimento de Aplicativos para
Android
ATRIBUTOS DA CLASSE DESENHAR:
 Defina os seguintes atributos para a classe “Desenhar”:
public class Desenhar extends View implements
GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener {
private GestureDetectorCompat gestos;
private Bitmap figura;
private int posX;
private int posY;
private float velX = 5;
private float velY = 3;
private boolean inicio = true;
private long tempoInicio;
// Continua...
Desenvolvimento de Aplicativos para
Android
CONSTRUTOR E DETECÇÃO DOS GESTOS:
public Desenhar(Context contexto) {
super(contexto);
gestos = new GestureDetectorCompat(this.getContext(),this);
gestos.setOnDoubleTapListener(this);
figura = BitmapFactory.decodeResource(getResources(),
R.drawable.bola);
}
public boolean onTouchEvent(MotionEvent event) {
gestos.onTouchEvent(event);
// Be sure to call the superclass implementation
return super.onTouchEvent(event);
}
// Continua...
01/09/2015
52
Desenvolvimento de Aplicativos para
Android
GESTO DOUBLETAP:
 Vamos utilizar o gesto DoubleTap para posicionar a bola
novamente na posição central da tela:
public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
inicio = true;
invalidate();
return false;
}
// Continua...
Desenvolvimento de Aplicativos para
Android
GESTO FLING:
 O gesto de Fling irá determinar o sentido em que a bola irá
se movimentar:
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
// TODO Auto-generated method stub
tempoInicio = System.currentTimeMillis();
if (velocityX > 0 && velX < 0)
velX = velX * (-1);
else if (velocityX < 0 && velX > 0)
velX = velX * (-1);
// Continua...
01/09/2015
53
Desenvolvimento de Aplicativos para
Android
GESTO FLING:
// Continuação...
if (velocityY > 0 && velY < 0)
velY = velY * (-1);
else if (velocityY < 0 && velY > 0)
velY = velY * (-1);
passo();
return false;
}
// Continua...
Desenvolvimento de Aplicativos para
Android
ANIMAÇÃO ATRAVÉS DE THREAD:
private void passo() {
long tempoAtual = System.currentTimeMillis();
posX += velX;
posY += velY;
invalidate();
if (tempoAtual <= tempoInicio + 1000) {
post(new Runnable() {
@Override
public void run() {
passo();
}
});
}
} // Continua...
01/09/2015
54
Desenvolvimento de Aplicativos para
Android
MÉTODO ONDRAW:
public void onDraw(Canvas canvas) {
if (inicio) {
posX = (canvas.getWidth() - figura.getWidth()) / 2;
posY = (canvas.getHeight() - (figura.getWidth()* 2)) / 2;
velX = 5; velY = 3; inicio = !inicio;
}
if (posX > (canvas.getWidth() - figura.getWidth())) {
posX = canvas.getWidth() - figura.getWidth();
velX = velX * (-1);
}
// Continua...
Desenvolvimento de Aplicativos para
Android
MÉTODO ONDRAW:
// Continuação...
if (posX < 0) {
posX = 0; velX = velX * (-1);
}
if (posY > (canvas.getHeight()- (figura.getHeight()* 2))) {
posY = canvas.getHeight() - (figura.getHeight() * 2);
velY = velY * (-1);
}
if (posY < 0) {
posY = 0; velY = velY * (-1);
}
canvas.drawBitmap(figura, posX, posY, null);
}
01/09/2015
55
OBRIGADO!!!
Prof. Me. Cláudio L. V. Oliveira
prof.claudioluis@fatec.sp.gov.br

Mais conteúdo relacionado

PDF
Tutorial - Como criar sua primeira app para Android
PDF
Android e Facebook - Integrando sua aplicação às redes sociais
PDF
Curso de desenvolvimento de aplicações para iOS com Objective-C
PDF
Introdução ao Desenvolvimento Android
DOCX
Tutorial da google maps javascript api v3
PDF
Aprenda a usar os recursos “câmera” do android, criando um app de forma prática
PDF
Documentao Projeto Android - Intent
DOC
Como criar interfaces gráficas com android
Tutorial - Como criar sua primeira app para Android
Android e Facebook - Integrando sua aplicação às redes sociais
Curso de desenvolvimento de aplicações para iOS com Objective-C
Introdução ao Desenvolvimento Android
Tutorial da google maps javascript api v3
Aprenda a usar os recursos “câmera” do android, criando um app de forma prática
Documentao Projeto Android - Intent
Como criar interfaces gráficas com android

Semelhante a Introdução ao Android (20)

PDF
Desenvolvimento de Aplicativos para Android
PDF
Android - Conceito e Arquitetura
PDF
Desenvolvimento de Aplicativos para a Plataforma Android
PDF
Descomplicando o Android
PDF
Android - Notas de aula
PDF
Introdução à programação em Android - Alcides Maya 16.04.2013
PDF
Introdução à programação em Android Senac 15/05/2012
PDF
Introdução a Plataforma Android
PDF
Desenvolvimento android
PDF
Introdução a programação em Android
PDF
Aulas Google Android
PPTX
Guia para o Profissional Android
PDF
Básico de desenvolvimento com Android
PPTX
Aula01 - introdução, Activity
PPTX
PPT
Introdução à programação em Android SENAC 17.06.2013
PDF
Introdução ao android e plataforma android
PDF
Introdução ao Android
PDF
Indrodução ao android 1º Encontro JUG VALE 2012
PDF
Introdução a programação em Android
Desenvolvimento de Aplicativos para Android
Android - Conceito e Arquitetura
Desenvolvimento de Aplicativos para a Plataforma Android
Descomplicando o Android
Android - Notas de aula
Introdução à programação em Android - Alcides Maya 16.04.2013
Introdução à programação em Android Senac 15/05/2012
Introdução a Plataforma Android
Desenvolvimento android
Introdução a programação em Android
Aulas Google Android
Guia para o Profissional Android
Básico de desenvolvimento com Android
Aula01 - introdução, Activity
Introdução à programação em Android SENAC 17.06.2013
Introdução ao android e plataforma android
Introdução ao Android
Indrodução ao android 1º Encontro JUG VALE 2012
Introdução a programação em Android
Anúncio

Introdução ao Android

  • 1. 01/09/2015 1 Desenvolvimento de Aplicativos para Android Prof. Me. Cláudio L. V. Oliveira prof.claudioluis@fatec.sp.gov.br HISTÓRICO:  Sistema operacional baseado em Linux para dispositivos móveis;  Desenvolvido pela Open Handset Alliance, liderada pelo Google e outras empresas  julho de 2005 a Google adquiriu a Android Inc., uma pequena empresa em Palo Alto, California, USA;  Principal objetivo era o desenvolvimento de uma plataforma de telefone móvel baseado em Linux, com o objetivo de ser uma plataforma flexível, aberta e de fácil migração para os fabricantes. Desenvolvimento de Aplicativos para Android
  • 2. 01/09/2015 2 OPEN HANDSET ALLIANCE (OHA): Aliança de diversas empresas com a intenção de criar padrões abertos para telefonia móvel. Desenvolvimento de Aplicativos para Android HTC DREAM: Historicamente o primeiro telefone comercialmente disponível a executar o sistema operacional Android foi o HTC Dream, lançado em 22 de outubro de 2008. Desenvolvimento de Aplicativos para Android
  • 3. 01/09/2015 3 CARACTERÍSTICAS:  Especificações para o Android são facilmente distribuídas;  Plataforma adaptada tanto para dispositivos VGA maiores, gráficos 2D, bibliotecas gráficas 3D baseadas em OpenGL ES especificação 2.0 e os layouts mais tradicionais de smartphones. Desenvolvimento de Aplicativos para Android CARACTERÍSTICAS:  APIs disponíveis para envio de mensagens SMS e MMS;  Armazenamento de dados através do SQLite;  Suporte adicional ao hardware permitindo utilizar a câmera de vídeo, tela sensível ao toque, GPS, acelerômetros e aceleração de gráficos 3D entre outros recursos do aparelho. Desenvolvimento de Aplicativos para Android
  • 4. 01/09/2015 4 AMBIENTE PARA DESENVOLVIMENTO:  ADT Eclipse  Android Studio http://developer.android.com/ Desenvolvimento de Aplicativos para Android ANDROID STUDIO: Desenvolvimento de Aplicativos para Android
  • 5. 01/09/2015 5 ADT ECLIPSE: Desenvolvimento de Aplicativos para Android Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (Android Studio):  Após abrir o Android Studio, escolha a opção “Start a new Android Studio project...”.
  • 6. 01/09/2015 6 Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (Android Studio):  Preencha as informações solicitadas: Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (Android Studio):  Defina onde o aplicativo irá ser executado:
  • 7. 01/09/2015 7 Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (Android Studio):  Selecione o modelo de activity que será utilizado: Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (Android Studio):  Na última janela defina o nome da Activity e pressione o botão “Finish”:
  • 8. 01/09/2015 8 Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (ADT Eclipse):  Após abrir o ADT, escolha a opção “File”, “New” e depois “Android Application Project”. Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (ADT Eclipse):  Defina o nome do projeto e forneça as informações a respeito do SDK.
  • 9. 01/09/2015 9 Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (ADT Eclipse):  Configure o Projeto, aceitando o valor padrão dos campos: Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (ADT Eclipse):  Defina os ícones da aplicação:
  • 10. 01/09/2015 10 Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (ADT Eclipse):  Selecione Blank Activity: Desenvolvimento de Aplicativos para Android CRIAÇÃO DO PROJETO (ADT Eclipse):  Defina um nome para a Activity que será criada e pressione o botão “Finish”:
  • 11. 01/09/2015 11 Desenvolvimento de Aplicativos para Android ANDROID SDK MANAGER:  Possibilita a configuração/atualização do SDK a também a definição das versões do Android a serem utilizadas no desenvolvimento. Desenvolvimento de Aplicativos para Android ANDROID VIRTUAL DEVICE MANAGER:  O AVD Manager contém as máquinas virtuais que representam os diversos dispositivos com Android no qual os aplicativos serão executados.
  • 12. 01/09/2015 12 Desenvolvimento de Aplicativos para Android ESTRUTURA DO PROJETO:  src: contém os arquivos com o código- fonte do aplicativo;  res: arquivos dos recursos utilizados no projeto;  res/layout: arquivos no formato XML com o “desenho” das telas do aplicativo;  res/values: arquivos, também em XML, que contém os valores, por exemplo, textos a serem utilizados. Desenvolvimento de Aplicativos para Android EXEMPLO DE ARQUIVO DE LAYOUT: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
  • 13. 01/09/2015 13 Desenvolvimento de Aplicativos para Android EXEMPLO DE ARQUIVO DE VALORES (string.xml): <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Olá</string> <string name="action_settings">Configurações</string> <string name="hello_world">Olá Pessoal!</string> </resources> @string/hello_world Desenvolvimento de Aplicativos para Android EXEMPLO DO CÓDIGO-FONTE EM JAVA: public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } // Continua...
  • 14. 01/09/2015 14 Desenvolvimento de Aplicativos para Android EXEMPLO DO CÓDIGO-FONTE EM JAVA: // ... Continuação: @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } Desenvolvimento de Aplicativos para Android COMPILAÇÃO E EXECUÇÃO:  Compile o aplicativo criado a partir da opção “Build” e “Make Project”. Selecione no menu “Run”, “Run <nome do projeto> e o dispositivo a ser emulado, por exemplo:
  • 15. 01/09/2015 15 Desenvolvimento de Aplicativos para Android EMULADOR:  O emulador será exibido e o aplicativo será executado no mesmo: Desenvolvimento de Aplicativos para Android ADICIONANDO UMA IMAGEM:  Copie a imagem a ser exibida dentro da pasta res, em seguida coloque um objeto ImageView no arquivo de layout:
  • 16. 01/09/2015 16 Desenvolvimento de Aplicativos para Android ADICIONANDO UMA IMAGEM:  Selecione o recurso: Desenvolvimento de Aplicativos para Android EXECUÇÃO DO APLICATIVO:
  • 17. 01/09/2015 17 Desenvolvimento de Aplicativos para Android ARQUITETURA: Desenvolvimento de Aplicativos para Android CICLO DE VIDA DE UM APLICATIVO:
  • 18. 01/09/2015 18 Desenvolvimento de Aplicativos para Android CÁLCULO DA IDADE:  Vamos criar um novo projeto e definir o layout da tela;  O aplicativo deverá solicitar o ano de nascimento ao usuário e, em seguida, calcular e mostrar a idade da pessoa. Desenvolvimento de Aplicativos para Android DEFINIÇÃO DO ID E TEXTO DOS OBJETOS :  Nos objetos criados utilize o atributo id para definir o nome (identificador) do objeto e o atributo text para definir o texto a ser mostrado, por exemplo, considerando o botão “Calcular”: id: @+id/calcular text: @string/bt_calcular  O conteúdos indicados com @string serão definidos no arquivo de recursos strings.xml, conforme mostrado no próximo slide.
  • 19. 01/09/2015 19 Desenvolvimento de Aplicativos para Android ARQUIVO STRING.XML DO PROJETO: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Cálculo de Idade</string> <string name="action_settings">Configurações</string> <string name="tv_ano"> Digite o seu ano de nascimento: </string> <string name="bt_calcular">Calcular</string> <string name="bt_limpar">Limpar</string> <string name="txt_idade">A sua idade é %1$d anos.</string> <string name="txt_erro"> ERRO: Preencha o ano de nascimento! </string> </resources> Desenvolvimento de Aplicativos para Android STRING VAZIA:  Precisamos inserir um método para verificar se uma determinada String está vazia. Posteriormente, esse método será utilizado para verificar se o campo ano de nascimento foi preenchido: public boolean eVazio(String texto) { if (texto != null && texto.trim().length() > 0) return false; else return true; }
  • 20. 01/09/2015 20 Desenvolvimento de Aplicativos para Android EVENTOS:  No evento onClick de um botão podemos definir o método a ser chamado, por exemplo, para o botão de limpar teremos: public void limparClicked(View v) { EditText etAnoNascimento = (EditText) findViewById(R.id.anoNascimento); etAnoNascimento.setText(""); } @+id/anoNascimento Desenvolvimento de Aplicativos para Android EVENTOS:  O evento onClick do botão calcular será programado da seguinte forma: public void calcularClicked(View v) { Context contexto = getApplicationContext(); EditText etAnoNascimento = (EditText) findViewById(R.id.anoNascimento); if (!eVazio(etAnoNascimento.getText().toString())) { String txtIdade = contexto.getString(R.string.txt_idade); Time hoje = new Time(Time.getCurrentTimezone()); hoje.setToNow(); int anoAtual = hoje.year;
  • 21. 01/09/2015 21 Desenvolvimento de Aplicativos para Android EVENTOS: int anoNascimento = new Integer( etAnoNascimento.getText().toString()); int idade = anoAtual - anoNascimento; Toast mensagem = Toast.makeText(contexto, String.format(txtIdade, idade), Toast.LENGTH_LONG); mensagem.show(); } else { String txtErro = contexto.getString(R.string.txt_erro); Desenvolvimento de Aplicativos para Android EVENTOS: Toast mensagem = Toast.makeText(contexto, txtErro, Toast.LENGTH_LONG); mensagem.show(); } }
  • 22. 01/09/2015 22 Desenvolvimento de Aplicativos para Android EMULADOR:  Após compilar e executar o projeto o emulador deverá ser exibido e o aplicativo será executado no mesmo: Desenvolvimento de Aplicativos para Android BOTÕES DE RÁDIO:  Crie um novo projeto chamado de “Quiz”, monte um layout similar ao mostrado a seguir, utilizando os objetos “RadioGroup” e “RadioButton”:
  • 23. 01/09/2015 23 Desenvolvimento de Aplicativos para Android CRIANDO UMA NOVA ACTIVITY:  Vamos adicionar uma nova tela (Activity) à aplicação, para isso, no menu “File” escolha “New”, “Other” e selecione “Android Activity”. Desenvolvimento de Aplicativos para Android CRIANDO UMA NOVA ACTIVITY:  Monte uma nova questão com as respectivas alternativas na tela que foi criada.
  • 24. 01/09/2015 24 Desenvolvimento de Aplicativos para Android ABRINDO A NOVA TELA:  Na tela principal programe o evento On Click do botão do botão Continuar. public void continuarClicked(View v) { Intent i = new Intent(MainActivity.this, Question2.class); startActivity(i); } Desenvolvimento de Aplicativos para Android RETORNANDO A TELA ANTERIOR:  Na nova tela programe o evento On Click do botão Voltar para encerrar a Activity. public void voltarClicked(View v) { finish(); }
  • 25. 01/09/2015 25 Desenvolvimento de Aplicativos para Android OBTENDO O VALOR DE UM BOTÃO DE RÁDIO:  O método isChecked irá retornar um valor booleano indicando se determinado botão de rádio está selecionado ou não, por exemplo: public void continuarClicked(View v) { RadioButton acerto = (RadioButton) findViewById(R.id.radio4); if (acerto.isChecked()) // Acertou... else // Errou... Intent i = new Intent(MainActivity.this, Question2.class); startActivity(i); } Desenvolvimento de Aplicativos para Android VALORES GLOBAIS:  Em algumas situações é necessário que um determinado valor esteja disponível entre várias Activities (telas). Neste exemplo vamos definir uma classe para o placar do quiz: public class Placar extends Application { private int ponto; public int getPonto() { return ponto; } public void setPonto(int ponto) { this.ponto = ponto; } }
  • 26. 01/09/2015 26 Desenvolvimento de Aplicativos para Android VALORES GLOBAIS:  Em seguida, devemos registrar a classe no arquivo AndroidManifest.xml, dentro do tag application: android:name="com.example.quiz.Placar" Desenvolvimento de Aplicativos para Android VALORES GLOBAIS:  Em cada Activity (tela) devemos obter os dados a partir do método getApplication: Placar placar = (Placar) getApplication();
  • 27. 01/09/2015 27 Desenvolvimento de Aplicativos para Android VALORES GLOBAIS:  O evento click no botão Continuar poderia ser implementado desta maneira: public void continuarClicked(View v) { Placar placar = (Placar) getApplication(); RadioButton acerto = (RadioButton) findViewById(R.id.radio4); if (acerto.isChecked()) placar.setPonto(1); else placar.setPonto(0); Intent i = new Intent(MainActivity.this, Question2.class); startActivity(i); } Desenvolvimento de Aplicativos para Android CAIXA DE MENSAGEM:  Na segunda tela do aplicativo vamos utilizar o botão Continuar para mostrar uma caixa de mensagem contendo o número de acertos do usuário: AlertDialog.Builder mensagem = new AlertDialog.Builder(this); mensagem.setTitle("Placar"); mensagem.setMessage("Você acertou " + placar.getPonto() + " questões."); mensagem.setNeutralButton("Ok", null); mensagem.show();
  • 28. 01/09/2015 28 Desenvolvimento de Aplicativos para Android QUIZ MELHORADO:  Crie um novo projeto com o nome “Quiz2” e monte um layout contendo os objetos relacionados na figura a seguir: Desenvolvimento de Aplicativos para Android CLASSE QUESTAO:  Adicione uma classe chamada Questao ao projeto com os seguintes atributos, desenvolva também os respectivos setters e getters e o método construtor: public class Questao { private String texto; private String alternativaA; private String alternativaB; private String alternativaC; private String alternativaD; private String alternativaE; private int gabarito; }
  • 29. 01/09/2015 29 Desenvolvimento de Aplicativos para Android ATRIBUTOS DO JOGO:  Na classe MainActivity vamos definir os seguintes atributos: public class MainActivity extends ActionBarActivity { private TextView texto; private RadioButton radio[]; private Questao questao[]; private int numero; private int ponto; // ... } Desenvolvimento de Aplicativos para Android OBJETOS UTILIZADOS:  Em seguida, no método onCreate, vamos criar os objetos associados aos componentes que foram desenhados na tela: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); texto = (TextView) findViewById(R.id.question); radio = new RadioButton[5]; radio[0] = (RadioButton) findViewById(R.id.radio0); radio[1] = (RadioButton) findViewById(R.id.radio1); radio[2] = (RadioButton) findViewById(R.id.radio2); radio[3] = (RadioButton) findViewById(R.id.radio3); radio[4] = (RadioButton) findViewById(R.id.radio4); // continua...
  • 30. 01/09/2015 30 Desenvolvimento de Aplicativos para Android CONTINUAÇÃO: questao = new Questao[5]; questao[0] = new Questao("Batman é a identidade secreta de", "Clark Kent", "Peter Parker", "Bruce Lee", "Tony Stark", "Bruce Wayne", 4); // Definir as outras quatro questões numero = 0; carregarQuestao(); ponto = 0; } Desenvolvimento de Aplicativos para Android EXIBIÇÃO DAS QUESTÕES:  O método carregarQuestao irá obter uma questão do vetor e mostrá-la na tela do aplicativo: public void carregarQuestao() { texto.setText(questao[numero].getTexto()); radio[0].setChecked(true); radio[0].setText(questao[numero].getAlternativaA()); radio[1].setText(questao[numero].getAlternativaB()); radio[2].setText(questao[numero].getAlternativaC()); radio[3].setText(questao[numero].getAlternativaD()); radio[4].setText(questao[numero].getAlternativaE()); }
  • 31. 01/09/2015 31 Desenvolvimento de Aplicativos para Android EXIBIÇÃO DO RESULTADO FINAL:  O método exibirPlacar irá mostrar uma caixa de mensagem informando a quantidade de acertos do usuário: public void exibirPlacar() { AlertDialog.Builder mensagem = new AlertDialog.Builder(this); mensagem.setTitle("Placar"); mensagem.setMessage("Você acertou " + ponto + " questões."); mensagem.setNeutralButton("Ok", null); mensagem.show(); } Desenvolvimento de Aplicativos para Android AVANÇAR PARA A PRÓXIMA QUESTÃO:  No click do botão continuar devemos verificar se o usuário acertou a questão e, em seguida, exibir a próxima. Depois da última questão o resultado deverá ser mostrado. public void continuarClicked(View v) { if (radio[questao[numero].getGabarito()].isChecked()) ponto++; numero++; if (numero == questao.length) { exibirPlacar(); numero = 0; ponto = 0; } carregarQuestao(); }
  • 32. 01/09/2015 32 Desenvolvimento de Aplicativos para Android BANCO DE DADOS:  Crie um novo projeto, vamos chamá-lo de “Quiz3”. Monte também um layout similar ao utilizado no exemplo anterior: Desenvolvimento de Aplicativos para Android QUESTÕES:  Adicione ao projeto a classe Questao, implementando também os respectivos getters, setters e construtores: public class Questao { private int numero; private String texto; private String alternativaA; private String alternativaB; private String alternativaC; private String alternativaD; private String alternativaE; private int gabarito; }
  • 33. 01/09/2015 33 Desenvolvimento de Aplicativos para Android SQLITE3:  Adicione uma classe nomeada “AcessoDados” que irá conter os métodos necessários para criar, manipular e consultar os dados: public class AcessoDados extends SQLiteOpenHelper { public AcessoDados(Context contexto) { super(contexto, "quiz", null, 1); // Apagar o banco quando for necessária alguma // alteração na estrutura // contexto.deleteDatabase("quiz"); } // Continua... Desenvolvimento de Aplicativos para Android CRIAÇÃO DA TABELA:  O método onCreate será implementado na classe “AcessoDados” e possui os comandos para criação da tabela: public void onCreate(SQLiteDatabase banco) { String DDL = "CREATE TABLE questao (" + "numero INTEGER PRIMARY KEY, texto TEXT, " + "alternativaA TEXT, alternativaB TEXT, " + "alternativaC TEXT, alternativaD TEXT, " + "alternativaE TEXT, gabarito TEXT)"; banco.execSQL(DDL); } // Continua...
  • 34. 01/09/2015 34 Desenvolvimento de Aplicativos para Android ATUALIZAÇÃO DA TABELA:  O método onUpgrade define como o banco irá se portar quando for necessário mudar a estrutura da tabela: public void onUpgrade(SQLiteDatabase banco, int oldVersion, int newVersion) { banco.execSQL("DROP TABLE IF EXISTS questao"); onCreate(banco); } // Continua... Desenvolvimento de Aplicativos para Android INSERINDO UM REGISTRO: public void inserir(Questao questao) { SQLiteDatabase banco = this.getWritableDatabase(); ContentValues valores = new ContentValues(); valores.put("numero", questao.getNumero()); valores.put("texto", questao.getTexto()); valores.put("alternativaA", questao.getAlternativaA()); valores.put("alternativaB", questao.getAlternativaB()); valores.put("alternativaC", questao.getAlternativaC()); valores.put("alternativaD", questao.getAlternativaD()); valores.put("alternativaE", questao.getAlternativaE()); valores.put("gabarito", questao.getGabarito()); banco.insert("questao", null, valores); banco.close(); } // Continua...
  • 35. 01/09/2015 35 Desenvolvimento de Aplicativos para Android CONSULTA: public Questao consultar (int numero) { SQLiteDatabase banco = this.getReadableDatabase(); Cursor campo = banco.query("questao", new String[] { "texto", "alternativaA", "alternativaB", "alternativaC", "alternativaD", "alternativaE", "gabarito" }, "numero = " + String.valueOf(numero), null, null, null, null, null); if (campo != null) campo.moveToFirst(); Questao questao = new Questao(); questao.setNumero(numero); questao.setTexto(campo.getString(0)); questao.setAlternativaA(campo.getString(1)); questao.setAlternativaB(campo.getString(2)); // Continua... Desenvolvimento de Aplicativos para Android CONSULTA: questao.setAlternativaC(campo.getString(3)); questao.setAlternativaD(campo.getString(4)); questao.setAlternativaE(campo.getString(5)); questao.setGabarito(campo.getInt(6)); campo.close(); return questao; } // Continua...
  • 36. 01/09/2015 36 Desenvolvimento de Aplicativos para Android OBTENDO A QUANTIDADE DE REGISTROS: public int getNumeroRegistros() { String consulta = "SELECT * FROM questao"; SQLiteDatabase db = this.getReadableDatabase(); Cursor campo = db.rawQuery(consulta, null); int numeroRegistros = campo.getCount(); campo.close(); return numeroRegistros; } Desenvolvimento de Aplicativos para Android TELA PRINCIPAL:  Na classe MainActivity vamos definir os atributos: public class MainActivity extends ActionBarActivity { private AcessoDados banco; private Questao questao; private TextView texto; private RadioButton radio[]; private int numero; private int ponto; // Continua...
  • 37. 01/09/2015 37 Desenvolvimento de Aplicativos para Android OBTENDO AS QUESTÕES: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); banco = new AcessoDados(this); texto = (TextView) findViewById(R.id.question); radio = new RadioButton[5]; radio[0] = (RadioButton) findViewById(R.id.radio0); radio[1] = (RadioButton) findViewById(R.id.radio1); radio[2] = (RadioButton) findViewById(R.id.radio2); radio[3] = (RadioButton) findViewById(R.id.radio3); radio[4] = (RadioButton) findViewById(R.id.radio4); carregarQuestoesIniciais(); numero = 1; ponto = 0; carregarQuestao(); } // Continua... Desenvolvimento de Aplicativos para Android CONJUNTO INICIAL DE QUESTÕES:  Este método irá carregar um conjunto inicial de questões quando a respectiva tabela estiver vazia: public void carregarQuestoesIniciais() { if (banco.getNumeroRegistros() == 0) { banco.inserir(new Questao(1, "Batman é a identidade secreta de", "Clark Kent", "Peter Parker", "Bruce Lee", "Tony Stark", "Bruce Wayne", 4)); // Inserir novas questões } } // Continua...
  • 38. 01/09/2015 38 Desenvolvimento de Aplicativos para Android CARREGANDO UMA QUESTÃO:  Este método irá obter uma questão armazenada no banco de dados e exibí-la na tela principal: public void carregarQuestao() { questao = banco.consultar(numero); texto.setText(questao.getTexto()); radio[0].setChecked(true); radio[0].setText(questao.getAlternativaA()); radio[1].setText(questao.getAlternativaB()); radio[2].setText(questao.getAlternativaC()); radio[3].setText(questao.getAlternativaD()); radio[4].setText(questao.getAlternativaE()); } // Continua... Desenvolvimento de Aplicativos para Android MOSTRANDO A PRÓXIMA QUESTÃO:  O click no botão Continuar irá mostrar a próxima questão ou a caixa de mensagem com o resultado final: public void continuarClicked(View v) { if (radio[questao.getGabarito()].isChecked()) ponto++; numero++; if (numero > banco.getNumeroRegistros()) { exibirPlacar(); numero = 1; ponto = 0; } carregarQuestao(); } // Continua...
  • 39. 01/09/2015 39 Desenvolvimento de Aplicativos para Android RESULTADO FINAL:  Este método mostra uma caixa de mensagem com o total de acertos obtidos pelo usuário: public void exibirPlacar() { AlertDialog.Builder mensagem = new AlertDialog.Builder(this); mensagem.setTitle("Placar"); mensagem.setMessage("Você acertou " + ponto + " questões."); mensagem.setNeutralButton("Ok", null); mensagem.show(); } Desenvolvimento de Aplicativos para Android TOUCHSCREEN:  Neste próximo projeto vamos trabalhar com os gestos reconhecidos pela tela de toque. Após criar o projeto, como o nome “StarTrekThemes”, adicione apenas uma TextView e uma ImageView:
  • 40. 01/09/2015 40 Desenvolvimento de Aplicativos para Android IMAGENS:  Copie cinco imagens para a pasta res/drawable-mdpi, conforme mostrado na figura ao lado: Desenvolvimento de Aplicativos para Android ADICIONANDO O SUPORTE AO TOUCHSCREEN:  Na classe MainActivity adicione as interfaces GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener: import android.support.v4.view.GestureDetectorCompat; import android.view.MotionEvent; import android.view.GestureDetector; public class MainActivity extends ActionBarActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { private GestureDetectorCompat detector; private TextView mensagem; private ImageView imagem; private int numero;
  • 41. 01/09/2015 41 Desenvolvimento de Aplicativos para Android RECURSOS:  Também na classe MainActivity crie um vetor para os textos e e outro para os recursos de imagens que serão usados no aplicativo, por exemplo: private String[] textos = { "Star Trek: The Original Series (1966-1969)", "Star Trek: The Next Generarion (1987-1994)", "Star Trek: Deep Space Nine (1993-1999)", "Star Trek: Voyager (1995-2001)", "Star Trek: Enterprise (2001-2005)"}; private int[] imagens = {R.drawable.tos, R.drawable.tng, R.drawable.ds9, R.drawable.voyager, R.drawable.enterprise}; Desenvolvimento de Aplicativos para Android CARREGANDO OS RECURSOS:  Acrescente o código a seguir no método onCreate: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.detector = new GestureDetectorCompat(this,this); detector.setOnDoubleTapListener(this); mensagem = (TextView) findViewById(R.id.mensagem); imagem = (ImageView) findViewById(R.id.imagem); numero = 0; mensagem.setText(textos[numero]); imagem.setImageResource(imagens[numero]); }
  • 42. 01/09/2015 42 Desenvolvimento de Aplicativos para Android HABILITANDO A DETECÇÃO DE GESTOS:  No método onTounchEvent devemos habilitar a detecção dos gestos adicionando o objeto detector: public boolean onTouchEvent(MotionEvent event) { this.detector.onTouchEvent(event); // Be sure to call the superclass implementation return super.onTouchEvent(event); } Desenvolvimento de Aplicativos para Android DETECÇÃO DE GESTOS - FLING:  O método onFling será usado para exibir a imagem seguinte ou a anterior, dependendo do sentido do movimento: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (velocityX < 0) { numero++; if (numero >= imagens.length) numero = 0; } else if (velocityX > 0) { numero--; if (numero < 0) numero = imagens.length - 1; } // Continua...
  • 43. 01/09/2015 43 Desenvolvimento de Aplicativos para Android DETECÇÃO DE GESTOS - FLING:  Concluindo o método onFling mostramos a nova imagem: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // ... mensagem.setText(textos[numero]); imagem.setImageResource( imagens[numero]); return false; } Desenvolvimento de Aplicativos para Android ARQUIVOS DE MÍDIA:  Vamos acrescentar ao nosso exemplo a possibilidade de tocar a música tema de cada uma das séries. Dentro da pasta res, crie uma pasta chamada raw e copie os arquivos de mídia para lá:
  • 44. 01/09/2015 44 Desenvolvimento de Aplicativos para Android MEDIA PLAYER:  A classe MediaPlayer é utilizada para reproduzir arquivos de mídia em diversos formatos. Declare um novo atributo para a classe MainActivity, assim como um vetor contendo os recursos de som: private MediaPlayer player; private int[] sons = {R.raw.tos, R.raw.tng, R.raw.ds9, R.raw.voyager, R.raw.enterprise}; Desenvolvimento de Aplicativos para Android PLAYING:  Quando o usuário realizar o gesto Double Tap o tema associado irá ser executado, por exemplo: public boolean onDoubleTapEvent(MotionEvent e) { // TODO Auto-generated method stub if (player == null || !player.isPlaying()) { player = MediaPlayer.create(MainActivity.this, sons[numero]); player.start(); } return false; }
  • 45. 01/09/2015 45 Desenvolvimento de Aplicativos para Android STOPING:  Quando o usuário mudar a imagem a música em execução deverá ser parada. Desta forma, no início do método onFling adicione o código a seguir: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (player != null && player.isPlaying()) { player.stop(); } // Continua... } Desenvolvimento de Aplicativos para Android ENCERRAMENTO DO APLICATIVO:  Quando o usuário encerrar o aplicativo, se houver alguma música em execução, a mesma deverá ser parada. public void onStop() { if ((player != null) && (player.isPlaying())) player.stop(); super.onStop(); }
  • 46. 01/09/2015 46 Desenvolvimento de Aplicativos para Android USO DE CANVAS:  Neste exemplo vamos abordar o conceito de Canvas que permite que realizemos os nossos próprios desenhos.  Crie um novo projeto, coloque o nome de “Quadrados” e adicione uma nova classe chamada “Desenhar”: Desenvolvimento de Aplicativos para Android USO DE CANVAS: public class Desenhar extends View { private Paint desenhar = new Paint(); public Desenhar(Context contexto) { super(contexto); } @Override public void onDraw(Canvas canvas) { desenhar.setColor(Color.BLACK); canvas.drawRect(30, 30, 80, 80, desenhar); desenhar.setColor(Color.RED); canvas.drawRect(33, 33, 77, 77, desenhar); } }
  • 47. 01/09/2015 47 Desenvolvimento de Aplicativos para Android ALTERAÇÃO DA MAINACTIVITY: public class MainActivity extends ActionBarActivity { private Desenhar desenhar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); desenhar = new Desenhar(this); setContentView(desenhar); } // Demais métodos implementados } Desenvolvimento de Aplicativos para Android EMULADOR:
  • 48. 01/09/2015 48 Desenvolvimento de Aplicativos para Android RECURSO DE IMAGEM:  Copie a imagem que deverá ser exibida para a pasta /res/drawable-mdpi: Desenvolvimento de Aplicativos para Android EXIBIÇÃO DE IMAGENS:  A partir da classe “Desenhar”, usada no exemplo anterior, vamos alterá-la para que realize a exibição de uma imagem: public class Desenhar extends View{ private Random random; private Bitmap figura; public Desenhar(Context contexto) { super(contexto); random = new Random(); figura = BitmapFactory.decodeResource(getResources(), R.drawable.bola); } // Continua...
  • 49. 01/09/2015 49 Desenvolvimento de Aplicativos para Android EXIBIÇÃO DE IMAGENS: // Continuação... @Override public void onDraw(Canvas canvas) { canvas.drawBitmap(figura, random.nextInt(canvas.getWidth()), random.nextInt(canvas.getHeight()), null); } } Desenvolvimento de Aplicativos para Android TIMER:  No método onCreate da MainActivity vamos criar um timer que irá alterar a posição da imagem a cada meio segundo: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); desenhar = new Desenhar(this); setContentView(desenhar); new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run() { desenhar.postInvalidate(); } }, 0, 500); }
  • 50. 01/09/2015 50 Desenvolvimento de Aplicativos para Android EMULADOR: Desenvolvimento de Aplicativos para Android DETECÇÃO DE GESTOS EM CANVAS:  Neste exemplo vamos controlar o movimento de um objeto na tela a partir dos gestos realizados pelo usuário. Crie um projeto chamado “AnimacaoGestos” e adicione uma classe chamada “Desenhar”. public class MainActivity extends ActionBarActivity { private Desenhar desenhar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); desenhar = new Desenhar(this); this.setContentView(desenhar); }
  • 51. 01/09/2015 51 Desenvolvimento de Aplicativos para Android ATRIBUTOS DA CLASSE DESENHAR:  Defina os seguintes atributos para a classe “Desenhar”: public class Desenhar extends View implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { private GestureDetectorCompat gestos; private Bitmap figura; private int posX; private int posY; private float velX = 5; private float velY = 3; private boolean inicio = true; private long tempoInicio; // Continua... Desenvolvimento de Aplicativos para Android CONSTRUTOR E DETECÇÃO DOS GESTOS: public Desenhar(Context contexto) { super(contexto); gestos = new GestureDetectorCompat(this.getContext(),this); gestos.setOnDoubleTapListener(this); figura = BitmapFactory.decodeResource(getResources(), R.drawable.bola); } public boolean onTouchEvent(MotionEvent event) { gestos.onTouchEvent(event); // Be sure to call the superclass implementation return super.onTouchEvent(event); } // Continua...
  • 52. 01/09/2015 52 Desenvolvimento de Aplicativos para Android GESTO DOUBLETAP:  Vamos utilizar o gesto DoubleTap para posicionar a bola novamente na posição central da tela: public boolean onDoubleTapEvent(MotionEvent e) { // TODO Auto-generated method stub inicio = true; invalidate(); return false; } // Continua... Desenvolvimento de Aplicativos para Android GESTO FLING:  O gesto de Fling irá determinar o sentido em que a bola irá se movimentar: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub tempoInicio = System.currentTimeMillis(); if (velocityX > 0 && velX < 0) velX = velX * (-1); else if (velocityX < 0 && velX > 0) velX = velX * (-1); // Continua...
  • 53. 01/09/2015 53 Desenvolvimento de Aplicativos para Android GESTO FLING: // Continuação... if (velocityY > 0 && velY < 0) velY = velY * (-1); else if (velocityY < 0 && velY > 0) velY = velY * (-1); passo(); return false; } // Continua... Desenvolvimento de Aplicativos para Android ANIMAÇÃO ATRAVÉS DE THREAD: private void passo() { long tempoAtual = System.currentTimeMillis(); posX += velX; posY += velY; invalidate(); if (tempoAtual <= tempoInicio + 1000) { post(new Runnable() { @Override public void run() { passo(); } }); } } // Continua...
  • 54. 01/09/2015 54 Desenvolvimento de Aplicativos para Android MÉTODO ONDRAW: public void onDraw(Canvas canvas) { if (inicio) { posX = (canvas.getWidth() - figura.getWidth()) / 2; posY = (canvas.getHeight() - (figura.getWidth()* 2)) / 2; velX = 5; velY = 3; inicio = !inicio; } if (posX > (canvas.getWidth() - figura.getWidth())) { posX = canvas.getWidth() - figura.getWidth(); velX = velX * (-1); } // Continua... Desenvolvimento de Aplicativos para Android MÉTODO ONDRAW: // Continuação... if (posX < 0) { posX = 0; velX = velX * (-1); } if (posY > (canvas.getHeight()- (figura.getHeight()* 2))) { posY = canvas.getHeight() - (figura.getHeight() * 2); velY = velY * (-1); } if (posY < 0) { posY = 0; velY = velY * (-1); } canvas.drawBitmap(figura, posX, posY, null); }
  • 55. 01/09/2015 55 OBRIGADO!!! Prof. Me. Cláudio L. V. Oliveira prof.claudioluis@fatec.sp.gov.br