01. @Override
02. public final void onItemSelected(AdapterView<?> arg0, android.view.View arg1, int posItem, long arg3)
03. {
04. nomeArqSelecionado = null;
05. nomeArqSelecionado (String)lista.getItemAtPosition(posItem);
06.
07. if(nomeArqSelecionado.endsWith(".mp3") ||
08. (nomeArqSelecionado.endsWith(".mid")))
09. {
10. formatoSelecionado = MUSICA;
11. }
12. else if(nomeArqSelecionado.endsWith(".png") ||
13. (nomeArqSelecionado.endsWith(".jpg") ||
14. (nomeArqSelecionado.endsWith(".gif"))))
15. {
16. formatoSelecionado = IMAGEM;
17. }
18. else if(nomeArqSelecionado.endsWith(".txt"))
19. {
20. formatoSelecionado = TEXTO;
21. }
22. else if(nomeArqSelecionado.endsWith(".3gp") ||
23. (nomeArqSelecionado.endsWith(".mp4")))
24. {
25. formatoSelecionado = VIDEO;
26. }
27. }
Em seguida, um passeio pelo método onItemSelected(AdapterView<?> arg0,
View arg1,int posItem, long arg3), que será invocado cada vez que um item da lista for
selecionado. Iremos nos ater apenas ao terceiro parâmetro do método, que guarda a
posição do item que estiver selecionado no momento. A linha 05 aponta que é
possível recuperar um elemento da lista em uma dada posição.
posição do item que estiver selecionado no momento. A linha 05 aponta que é
possível recuperar um elemento da lista em uma dada posição.
Nesta aplicação, cada item da lista corresponde ao nome de um arquivo recuperado do cartão de memória. O próximo passo é checar se o nome do arquivo termina com alguma
extensão aceita pelo aplicativo e sendo o caso, avisar à variável formatoSelecionado. Quando o usuário chamar o menu da aplicação, o título do item direito irá mudar de acordo com o
elemento selecionado na lista.
CRIANDO O MENU DA ACTIVITY PRINCIPAL
01. @Override
02. public final boolean onCreateOptionsMenu(Menu menu)
03. {
04. SubMenu voltar = menu.addSubMenu("Sair");
05. voltar.getItem().setOnMenuItemClickListener(this);
06.
07. SubMenu lerArquivo = menu.addSubMenu("Ler Arquivo");
08. lerArquivo.getItem().setOnMenuItemClickListener(this);
09.
10. return super.onCreateOptionsMenu(menu);
11. }
O método onCreateOptionsMenu(Menu menu) é chamado apenas uma vez, quando sua
Activity é criada. Como o próprio nome diz, ele cria um menu que será incorporado a Activity.
Analisando o corpo do método, vemos que cada um dos sub-menus é criado através dainstância da classe Menu com métodos bem intuitivos. Basicamente, damos a cada sub-menu um título e o preparamos para responder a eventos de clique/toque. Você também podeassociar a um sub-menu um ícone ao invés de um nome, assim como construir o menucompleto em um arquivo XML, mas isso não será abordado neste tutorial.
DEFININDO DINAMICAMENTE O TÍTULO DO MENU
01. @Override
02. public final boolean onPrepareOptionsMenu(Menu menu)
03. {
04. final int LER_ARQUIVO = 1;
05.
06. MenuItem lerArq = menu.getItem(LER_ARQUIVO);
07.
08. switch(formatoSelecionado)
09. {
10. case MUSICA:
11. lerArq.setTitle("Tocar Musica");
12.
13. break;
14. case VIDEO:
15. lerArq.setTitle("Reproduzir Video");
16.
17. break;
18. case TEXTO:
19. lerArq.setTitle("Visuazliar Texto");
20.
21. break;
22. case IMAGEM:
23. lerArq.setTitle("Exibir Imagem");
24.
25. break;
26. }
27.
28. return super.onCreateOptionsMenu(menu);
29. }
Quando se seleciona a tecla menu, seja no emulador ou em um smarthphone, é chamado o método onPrepareOptionsMenu(Menu menu), que então exibe o menu completo na parte inferior da tela. Aqui o título do sub-menu direito irá mudar de acordo com o item da lista que estiver selecionado.
ESCOLHENDO O ARQUIVO A REPRODUZIR
01. @Override
02. public final boolean onMenuItemClick(MenuItem item)
03. {
04. if(item.getTitle() == "Sair")
05. {
06. finish();
07. }
08. else
09. {
10. Bundle arquivo = new Bundle();
11.
12. arquivo.putInt("Formato", formatoSelecionado);
13. arquivo.putString("DirArquivo", sdcard + "/" + nomeArqSelecionado);Selecionado);
14.
15. startActivity(new android.content.Intent("REPRODUZIR_ARQUIVO").putExtras(arquivo));xtras(arquivo));
16. }
17.
18. return false;
19. }
É hora de entender o que ocorre quando se seleciona um dos itens do menu da tela
principal. Em primeiro lugar, é chamado o método onMenuItemClick(MenuItem item), que
recebe como parâmetro à referência ao item de menu selecionado. Para saber qual item de menu foi ativado pelo usuário, utilizamos o seu título, definido durante a criação do menu e alterado cada vez que um item da lista é selecionado.
No código, vemos que se o título for igual ‘Sair’, é encerrado o programa com o método finish() da classe Activity. Internamente, ele chamará o método onDestroy(), que de fato destrói a Activity. Do contrário, a tela atual irá chamar por uma segunda Activity, a qual tem por finalidade reproduzir o conteúdo do arquivo selecionado na lista. Com a classe Bundle, passaremos informações extras ao chamar outra Activity, para dizer-lhe o que fazer quando esta for criada. A classe Bundle funciona como uma tabela de registros, cada um com valores e chaves associadas. Note que depois de instanciar Bundle, nós alimentamos a tabela com dois registros: um com um valor inteiro, que avisará a Activity seguinte sobre o formato a reproduzir, e o segundo com o caminho completo do arquivo.
Por fim, ao chamar a segunda Activity, note o parâmetro fornecido a sua Intent. Trata-se de uma String como uma referência mais amigável a outra tela. Essa nome é o mesma usado para registrar uma Activity no arquivo de manifesto do projeto:
Chamando o método putExtras(Bundle arquivo) na Intent criada, nós estamos passando a tabela que acabamos de criar para a segunda tela.
ReproducaoArquivo.java
01. private static int formato;
02. private final MediaPlayer player = new MediaPlayer();
Logo no início, alocamos duas variável globais. A variável formato permite a Activity atual saber que tipo de arquivo reproduzir e player tem o propósito de tocar uma música.CRIACAO DA TELA DE REPRODUÇÃO DE ARQUIVOS
01. @Override
02. protected void onCreate(Bundle savedInstanceState)
03. {
04. super.onCreate(savedInstanceState);
05.
06. Bundle arquivo = getIntent().getExtras();
07. formato = arquivo.getInt("Formato");
08. String dirArq = arquivo.getString("DirArquivo");
09.
10. switch(formato)
11. {
12. case IMAGEM:
13. exibirImagem(dirArq);
14.
15. break;
16. case MUSICA:
17. tocarMusica(dirArq);
18.
19. break;
20. case VIDEO:
21. reproduzirVideo(dirArq);
22.
23. break;
24. case TEXTO:
25. visualizarTexto(dirArq);
26.
27. break;
28. }
29. }
Agora você ficará sabendo como a tela invocada intercepta as informações passadas pela tela chamadora. Na linha 06, a Activity recém-criada recuperou a Intent que lhe foi passada pela sua vizinha e ao mesmo tempo, a tabela anexada a ela, por meio de getExtras(). Com a tabela instanciada em mãos, obtemos os valores referentes ao formato e caminho do arquivo através das chaves associadas a eles na Activity anterior.Após isso, um teste usará o a variável formato para determinar que tipo de arquivo será lido e a referência dirArq para saber onde o mesmo se encontra.EXIBINDO A IMAGEM
01. private final void exibirImagem(String dirArq)
02. {
03. ImageView imagem = new ImageView(this);
04. imagem.setImageBitmap(android.graphics.BitmapFactory.decodeFile(dirArq));
05.
06. setContentView(imagem, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
07. }
Estudaremos primeiro o que o método exibirImagem(dirArq) fará caso seja o escolhido.
Na linha 03, criamos um componente ImageView, cuja função é exibir uma imagem na tela. Uma das formas de definir a imagem a ser exibida é por meio de um Bitmap, classe que representa uma imagem no Android.Com a classe BitmapFactory, podemos obter um bitmap de diferentes fontes, sendo que nesse caso a fonte adotada foi o caminho do arquivo passado pela Activity anterior, o que confirma a linha 04.Passaremos a referência imagem para setContentView(View v, LayoutParams p), queconfigurará a aparência da tela. O primeiro parâmetro, como já sabemos, corresponde aImageView criada. Já o segundo é uma referência de LayoutParams, que determina como alargura e altura devem aparecer na tela. A constante FILL_PARENT estica o componente ao máximo na horizontal ou na vertical. Isso quer dizer que mesmo que o tamanho real da imagem fosse de 50x50 pxs, ela seria alargada para preencher a tela inteira. Se quiséssemos exibi-la em seu tamanho real, substituiríamos FILL_PARENT por WRAP_CONTENT.
Imagem preenchendo uma Activity modal |
1 comentários:
Ola tens como mandar este projeto por email
Aqui não deu muito certo no meu!!
Postar um comentário