terça-feira, 15 de maio de 2012

Como fazer uma Splash Screen

Splash Screen é um padrão de design onde é exibido uma tela com uma imagem ou animação durante a abertura do aplicativo. Esse padrão existe desde antes dos smartphones, nos softwares para desktop (offices, photoshop, etc...). 

A princípio essa tela é exibida para o usuário enquanto carregamentos pesados de inicialização são feitos, entretanto, pela popularização do padrão, alguns aplicativos o utilizam apenas para elucidar e apresentar de forma bonita o aplicativo. Hoje aprenderemos dos dois modos.

A Splash Screen será apenas uma Activity a ser exibida antes da Activity principal do aplicativo. Então para implementa-la apenas crie uma Activity, ou use a que é criada automaticamente no projeto, e tenha certeza de que ela será a primeira Activity a ser chamada através do AndroidManifest. Feito isso defina o layout como quiser, normalmente apenas com uma imagem ou animação simples, e por regra geral sem widgets de interação com usuário.

Não explicarei como criar essa Activity e o layout pois suponho que você já sabe, mas se não for o caso acesse o tutorial Hello Android. Irei apenas explicar o código da Activity pois é o que implementará o Splash Screen.

Ao criar uma Splash Screen é importante ter noções de multiprogramação, já que para fazer carregamentos pesados é extremamente recomentado que se utilize uma thread diferente da thread principal pois assim o aplicativo continua respondendo o usuário. Entretanto para a utilização de outras threads no Android é recomendado sempre utilizar a classe Handler, pois apenas através dele sua thread pode alterar a UI.

Para exibir a Splash Screen por alguns segundos sem fazer nenhum carregamento é bastante simples, apenas coloque esse código no final do seu onCreate:

  1.         new Handler().postDelayed(new Runnable() {
  2.            
  3.             @Override
  4.             public void run() {
  5.                 startActivity(new Intent(SplashActivity.this, FeriadosActivity.class));
  6.                 finish();
  7.             }
  8.         }, DELAY);


O código que está dentro do run() será executado após o tempo definido por DELAY, em milisegundos. O que será executado é apenas a chamada para próxima Activity e a finalização da Activity do Splash Screen. Bem simples não? Mas e se quiser realizar algum carregamento ou inicialização? É basicamente a mesma coisa, só que não haverá o delay, e todo o código de carregamento e finalização da Activity deverá ser chamado no run():

  1.         new Handler().post(new Runnable() {
  2.            
  3.             @Override
  4.             public void run() {
  5.                 //Executar carregamento e inicialização aqui!
  6.                 startActivity(new Intent(SplashActivity.this, FeriadosActivity.class));
  7.                 finish();
  8.             }
  9.         });


Fácil não? Só tenha cuidado para que seu carregamento não seja infinito, caso esteja utilizando uma requisição web, e acabar deixando o aplicativo travado na Splash Screen. E se seu carregamento for extremamente demorado, mais de 3 segundos, o ideal é utilizar alguma coisa que informe o usuário que algo está sendo feito ou, melhor ainda, o progresso do processamento, através do ProgressDialog, por exemplo.

É importante que você gaste invista algum tempo aprendendo sobre multiprogramação, threads e Handler, pois esses conceitos serão muito utilizados em aplicativos um pouco mais complexos.

12 comentários:

Felipe Albertti at 15 de maio de 2012 09:51 disse...

Dei uma segurada no estudo do Android por falta de tempo mas curti, vou tentar fazer aqui quando tiver um tempo

ricardolazio at 15 de maio de 2012 18:34 disse...

Excelente post amigo, obrigado por colocar à disposição de programadores como eu,(que estão aprendendo o mundo Android, post com explicações importantes no desenvolvimento do Apps.



Abraços..


Ricardo Lazio

Gustavo Carvalho at 15 de maio de 2012 18:39 disse...

Disponha! =]

Obrigado pelo feedback!

Anônimo at 21 de maio de 2012 08:10 disse...

Ótimo post. É difícil utilizar esses tutoriais para criar alguma coisa como o Google Currents: http://www.youtube.com/watch?v=5LOcUkm8m9w ?

Abraços
Thiago

Gustavo Carvalho at 21 de maio de 2012 08:27 disse...

Obrigado. =]

O Google Currents é bastante complexo, e, pelo menos por enquanto, qualquer aplicativo que você fizer que não for o básico do básico você terá que estudar e pesquisar bastante além dos tutoriais apresentados aqui, que servem de base para coisas específicas mas que deve-se ser combinada a muitas outras coisas para criar um bom aplicativo.

A documentação oficial (http://developer.android.com) é muito boa, use-a também.

Anônimo at 22 de maio de 2012 22:34 disse...

Gustavo, obrigado pela resposta. Fiquei com uma dúvida que não tem haver com o post. Você faria uma vídeo aula para mim, sobre alguns temas específicos mediante há um pagamento?

Vou aguardar sua resposta. Caso seja positiva, irei te enviar mais detalhes.

Abraços
Thiago

Gustavo Carvalho at 22 de maio de 2012 23:11 disse...

Sim! Vamos conversar sobre isso por e-mail (gdacarv@gmail.com).

Abraços

Anônimo at 24 de maio de 2012 09:24 disse...

Olá Gustavo,

Já enviei o email. Estou no aguardo da sua resposta.

Abraços
Thiago

João Paulo Rossi at 15 de fevereiro de 2013 09:23 disse...

Muito bom post!

Parabéns

EsromG5 [Espaço do Android] at 4 de abril de 2013 13:04 disse...

Mas e no caso que eu queira que mostre uma tela igual essa mas não sempre que eu iniciar o aplicativo, e sim só a primeira vez após ele ser instalado, o que eu devia fazer ?

AndroidUser at 24 de abril de 2014 00:21 disse...

Não entendi nada.

RAMETLAMARKETING at 11 de dezembro de 2015 08:22 disse...

renda extra http://www.pvtraffic.com/?r=rametla2013

Postar um comentário

 
© 2011 Tutoriandroid | Recode by Ardhiansyam | Based on Android Developers Blog