[RESOLVIDO] Exibir uma capa ao iniciar a APP enquanto ocorre o carregamento das informações

6 respostas
temonteiro

Oi gente,
Estou com a seguinte dúvida, como faço para colocar uma imagem na hora que está iniciando a activity?
Exemplo:
INICIA A APP > CARREGANDO - EXIBE UMA IMAGEM > TERMINA O CARREGAMENTO > EXIBE AS INFORMAÇÕES.

Alguma ideia?

6 Respostas

adrielcafe

Você deve estar se referindo a um SplashScreen. Caso seja isso vou mostrar como eu faço.

IMPORTANTE: Esse é uma forma bem "rústica" de se fazer. Apenas irá aparecer uma Activity e depois de um tempo determinado ela chamará outra Activity. Não tem nada carregando em plano de fundo mas isso pode ser facilmente resolvido usando o AsyncTask ou Handler :wink:

1º - SplashScreenActivity O XML geralmente contém apenas uma imagem centralizada, então não há necessidade de mostrar-lo. Nessa classe criamos uma Thread que irá durar o tempo que informar-mos (int intervalo) e quando esse tempo acabar ela chamará a MainActivity. Temos também o onUserInteraction() que será disparado quando o usuário tocar na tela. Ao tocar vamos imediatamente para a MainActivity.
public class SplashScreenActivity extends Activity {
	private Thread splashThread;
	private int waited = 0;
	private int intervalo = 20000;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
                
                // FullScreen!
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

		setContentView(R.layout.splash);

		splashThread = new Thread() {
			@Override
			public void run() {
				try {
					while (waited < intervalo) {
						sleep(100);
						waited += 100;
					}
				} catch (InterruptedException e) {
					
				} finally {
					Intent i = new Intent();
					i.setClass(getBaseContext(), MainActivity.class);
					startActivity(i);
				}
			}
		};

		splashThread.start();
	}

	@Override
	public void onUserInteraction() {
		super.onUserInteraction();
		waited = intervalo;
	}
}
2º - Manifest.xml O Manifest deve ficar parecido com o exemplo abaixo:
<activity android:name=".simpledrumshd.SplashScreenActivity">
	<intent-filter>
		<action android:name="android.intent.action.MAIN" />
		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>
</activity>
<activity
	android:name=".simpledrumshd.MainActivity"
	android:label="@string/app_name">
	<intent-filter>
		<category android:name="android.intent.category.DEFAULT" />
	</intent-filter>
</activity>

Espero ter ajudado :)

temonteiro

É isso mesmo, vou dar uma olhadinha com calma e depois eu falo se deu certo.

temonteiro

Era exatamente isso.
Obrigada ! :smiley:

adrielcafe

O GUJ agradece! Obrigado e volte sempre :smiley:

P

SplashScreen baseada em tempo é uma falácia.

Digo isto porquê a maneira correta de implementar é fazer com que ela saia da tela tão logo a aplicação esteja realmente pronta para ser exibida.

O problema da temporização é que se você definir que a splash ficará por 5 segundos na tela e teu dispositivo demorar mais do que isto para inicializar a aplicação, você terá problemas…

Então a dica é: Implemente de forma a não depender de tempo, mas sim da condição da app. Se ela está realmente pronta para ser usada, você retira a splash da tela e apresenta a interface principal.

Esta regra sempre valeu para qualquer linguagem/sistema (desktop/mobile).

temonteiro

Eu uso minha splash screen com asynctask e só aparece as minhas informações depois de todo o carregamento.
Sofri muito para conseguir,mas ficou lindão.
Valeu pela dica !! :smiley:

Criado 5 de janeiro de 2012
Ultima resposta 12 de jan. de 2012
Respostas 6
Participantes 3