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>