La estructura de la aplicación es la siguiente:
- SplashActivity + activity_splash.xml: Pantalla que muestran logo, un texto y una barra de progreso. Transcurridos 10 segundos se cierra y aparece la primera pantalla utilizable de la aplicación
- BoardActivity: Pantalla que aparecerá tras la pantalla de inicio
- Animacion_circulo, animacion_punto, animacion_texto: archivos de animación de cada uno de los elementos que están en la pantalla
SplashActivity
package com.developandsystem.onboardintro; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; public class SplashActivity extends AppCompatActivity { private TextView texto; private ImageView logoUno, logoDos; private Animation animExterior, animInterior, animTexto; private ProgressBar barraProgreso; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); instancias(); logoUno.setAnimation(animExterior); logoDos.setAnimation(animInterior); texto.setAnimation(animTexto); animTexto.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { barraProgreso.setVisibility(View.VISIBLE); new TareaAsynBProgreso().execute(10); } @Override public void onAnimationRepeat(Animation animation) { } }); } private void instancias() { texto = findViewById(R.id.textoTitulo); logoDos = findViewById(R.id.logoInterior); logoUno = findViewById(R.id.logoExterior); animExterior = AnimationUtils.loadAnimation(this,R.anim.animacion_circulo); animInterior = AnimationUtils.loadAnimation(this,R.anim.animacion_punto); animTexto = AnimationUtils.loadAnimation(this,R.anim.animacion_texto); barraProgreso = findViewById(R.id.barraProgreso); } public class TareaAsynBProgreso extends AsyncTask<Integer,Integer,Void>{ @Override protected Void doInBackground(Integer... integers) { barraProgreso.setMax(integers[0]); for (int i = 0;i<100;i++){ publishProgress(i); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); barraProgreso.setProgress(values[values.length-1]); } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); Intent i = new Intent(SplashActivity.this,BoardActivity.class); startActivity(i); finish(); } } }
Activity_splash
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res-auto"> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.7" android:layout_marginTop="70dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@drawable/exterior" android:id="@+id/logoExterior" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/interior" android:layout_gravity="center_horizontal" android:id="@+id/logoInterior" /> </FrameLayout> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/barraProgreso" android:layout_marginBottom="20sp" android:visibility="invisible"/> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.3" android:text="@string/name_web" android:textSize="30dp" android:textAlignment="center" android:fontFamily="serif" android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" android:id="@+id/textoTitulo"/> </LinearLayout>
Animaciones
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration = "4000"/> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration = "2000"/> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration = "4000" android:fromYDelta="100%p" android:toXDelta="0%p"> </translate> </set>