Dark Mode
Image

Android Fragments

Android Service

Android AlarmManager

Camera Tutorial

Sensor Tutorial

Android Graphics

Android Animation

Android Web Service

Android MCQ

Android Quiz

Introduction Slider (Launch very first time when app start)

It is a good idea to implement a welcome slider screen which introduces the major features of the app. In this slider, a brief introduction of the app can be given where the user can swipe through the sliders before launching the application (MainActivity or Home-page).

Android Introduction Slider Example

In this example, we will use SharedPreferences class that is used to keep the state whether the app is being launched the first time or not. If the app is launched for the very first time, then it displays sliders before launching the application otherwise launch MainActivity.

Create an activity_main.xml file in layout directory with following code (your UI).

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="@color/bg_mainactivity"  
    tools:context="example.javatpoint.com.introonetimefirsttime.MainActivity">  
  
  
    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="176dp"  
        android:textSize="18dp"  
        android:text="This is your MainActivity or Home Page"  
        android:textColor="@android:color/white"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintHorizontal_bias="0.503"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent" />  
  
    <Button  
        android:id="@+id/btn_click"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="96dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:text="Button"  
        android:onClick="btn_Click"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintHorizontal_bias="0.501"  
        app:layout_constraintStart_toStartOf="parent" />  
  
</android.support.constraint.ConstraintLayout>

Create an activity_welcome.xml file and add the following code. It is used for the layout of slider.

activity_welcome.xml

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:showIn="@layout/activity_welcome">  
  
  
    <android.support.v4.view.ViewPager  
        android:id="@+id/view_pager"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent" />  
  
    <LinearLayout  
        android:id="@+id/layoutDots"  
        android:layout_width="match_parent"  
        android:layout_height="@dimen/dots_height"  
        android:layout_alignParentBottom="true"  
        android:layout_marginBottom="@dimen/dots_margin_bottom"  
        android:gravity="center"  
        android:orientation="horizontal">  
  
    </LinearLayout>  
  
    <View  
        android:layout_width="match_parent"  
        android:layout_height="1dp"  
        android:alpha=".5"  
        android:layout_above="@id/layoutDots"  
        android:background="@android:color/white" />  
  
    <Button  
        android:id="@+id/btn_next"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"  
        android:layout_alignParentRight="true"  
        android:background="@null"  
        android:text="@string/next"  
        android:textColor="@android:color/white" />  
  
    <Button  
        android:id="@+id/btn_skip"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"  
        android:layout_alignParentLeft="true"  
        android:background="@null"  
        android:text="@string/skip"  
        android:textColor="@android:color/white" />  
  
</RelativeLayout> 

Now create the layout for the welcome sliders as welcome_slide1.xml and welcome_slide2.xml in layout directory.

welcome_slide1.xml

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="@color/bg_screen1">  
  
    <LinearLayout  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_centerInParent="true"  
        android:gravity="center_horizontal"  
        android:orientation="vertical">  
  
        <ImageView  
            android:layout_width="@dimen/img_width_height"  
            android:layout_height="@dimen/img_width_height"  
            android:src="@drawable/jtp_logo" />  
  
        <TextView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="@string/slide_1_title"  
            android:textColor="@android:color/white"  
            android:textSize="@dimen/slide_title"  
            android:textStyle="bold" />  
  
        <TextView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_marginTop="20dp"  
            android:paddingLeft="@dimen/desc_padding"  
            android:paddingRight="@dimen/desc_padding"  
            android:text="@string/slide_1_desc"  
            android:textAlignment="center"  
            android:textColor="@android:color/white"  
            android:textSize="@dimen/slide_desc" />  
  
    </LinearLayout>  
</RelativeLayout> 

welcome_slide2.xml

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="@color/bg_screen2">  
    <LinearLayout  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_centerInParent="true"  
        android:gravity="center_horizontal"  
        android:orientation="vertical">  
  
        <ImageView  
            android:layout_width="@dimen/img_width_height"  
            android:layout_height="@dimen/img_width_height"  
            android:src="@drawable/image" />  
  
        <TextView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="@string/slide_2_title"  
            android:textColor="@android:color/white"  
            android:textSize="@dimen/slide_title"  
            android:textStyle="bold" />  
  
        <TextView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_marginTop="20dp"  
            android:paddingLeft="@dimen/desc_padding"  
            android:paddingRight="@dimen/desc_padding"  
            android:text="@string/slide_2_desc"  
            android:textAlignment="center"  
            android:textColor="@android:color/white"  
            android:textSize="@dimen/slide_desc" />  
  
    </LinearLayout>  
  
</RelativeLayout>

colors.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <color name="colorPrimary">#3F51B5</color>  
    <color name="colorPrimaryDark">#303F9F</color>  
    <color name="colorAccent">#FF4081</color>  
    <color name="bg_mainactivity">#d4e6e3</color>  
    <!-- Screens background color-->  
    <color name="bg_screen1">#16c266</color>  
    <color name="bg_screen2">#90c2bb</color>  
  
    <!-- dots inactive colors -->  
    <color name="dot_dark_screen1">#39d1ba</color>  
    <color name="dot_dark_screen2">#14a895</color>  
  
    <!-- dots active colors -->  
    <color name="dot_light_screen1">#8de7f9</color>  
    <color name="dot_light_screen2">#8cf9eb</color>  
  
   <array name="array_dot_active">  
        <item>@color/dot_light_screen1</item>  
        <item>@color/dot_light_screen2</item>  
    </array>  
  
    <array name="array_dot_inactive">  
        <item>@color/dot_dark_screen1</item>  
        <item>@color/dot_dark_screen2</item>  
    </array>  
</resources>

strings.xml

<resources>  
    <string name="app_name">IntroOneTimeFirstTime</string>  
  
    <string name="next">NEXT</string>  
    <string name="skip">SKIP</string>  
    <string name="start">GOT IT</string>  
  
    <string name="slide_1_title">Welcome to Javatpoint!</string>  
    <string name="slide_1_desc">Javatpoint is passionate to offer better technical content to the world.</string>  
  
    <string name="slide_2_title">Android</string>  
    <string name="slide_2_desc">Android is a mobile operating system developed by Google.</string>  
  
</resources>  

dimens.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <!-- Default screen margins, per the Android Design guidelines. -->  
    <dimen name="activity_horizontal_margin">16dp</dimen>  
    <dimen name="activity_vertical_margin">16dp</dimen>  
    <dimen name="fab_margin">16dp</dimen>  
    <dimen name="dots_height">30dp</dimen>  
    <dimen name="dots_margin_bottom">20dp</dimen>  
    <dimen name="img_width_height">120dp</dimen>  
    <dimen name="slide_title">30dp</dimen>  
    <dimen name="slide_desc">16dp</dimen>  
    <dimen name="desc_padding">40dp</dimen>  
  
</resources> 

Create a PrefManager.java class and add the following code. In the class, we use SharedPreferences class that keeps the preference name and a Boolean state true if the app is launched for the first time.

PrefManager.java

package example.javatpoint.com.introonetimefirsttime;  
  
import android.content.Context;  
import android.content.SharedPreferences;  
  
public class PrefManager {  
    SharedPreferences pref;  
    SharedPreferences.Editor editor;  
    Context _context;  
    // shared pref mode  
    int PRIVATE_MODE = 0;  
  
    // Shared preferences file name  
    private static final String PREF_NAME = "welcome";  
    private static final String IS_FIRST_TIME_LAUNCH = "IsFirstTimeLaunch";  
  
    public PrefManager(Context context) {  
        this._context = context;  
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);  
        editor = pref.edit();  
    }  
  
    public void setFirstTimeLaunch(boolean isFirstTime) {  
        editor.putBoolean(IS_FIRST_TIME_LAUNCH, isFirstTime);  
        editor.commit();  
    }  
  
    public boolean isFirstTimeLaunch() {  
        return pref.getBoolean(IS_FIRST_TIME_LAUNCH, true);  
    }  
}  

In the WelcomeActivity.java class file, add the following code.

In this class, we are performing the following tasks:

  • Checking the first time launch of the application using prefManager.isFirstTimeLaunch() method, if it returns true then the file MainActivity.java will be launched.
  • Adding the slider with Skip and Next buttons.

WelcomeActivity.java

package example.javatpoint.com.introonetimefirsttime;  
  
import android.support.v4.view.ViewPager;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.content.Context;  
import android.content.Intent;  
import android.graphics.Color;  
import android.os.Build;  
import android.support.v4.view.PagerAdapter;  
import android.text.Html;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.view.Window;  
import android.view.WindowManager;  
import android.widget.Button;  
import android.widget.LinearLayout;  
import android.widget.TextView;  
public class WelcomeActivity extends AppCompatActivity {  
  
    private ViewPager viewPager;  
    private MyViewPagerAdapter myViewPagerAdapter;  
    private LinearLayout dotsLayout;  
    private TextView[] dots;  
    private int[] layouts;  
    private Button btnSkip, btnNext;  
    private PrefManager prefManager;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
  
        // Checking for first time launch - before calling setContentView()  
        prefManager = new PrefManager(this);  
        if (!prefManager.isFirstTimeLaunch()) {  
            launchHomeScreen();  
            finish();  
        }  
  
        // Making notification bar transparent  
        if (Build.VERSION.SDK_INT >= 21) {  
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);  
        }  
  
        setContentView(R.layout.activity_welcome);  
  
        viewPager = (ViewPager) findViewById(R.id.view_pager);  
        dotsLayout = (LinearLayout) findViewById(R.id.layoutDots);  
        btnSkip = (Button) findViewById(R.id.btn_skip);  
        btnNext = (Button) findViewById(R.id.btn_next);  
  
  
        // layouts of welcome sliders  
        layouts = new int[]{  
                R.layout.welcome_slide1,  
                R.layout.welcome_slide2  
        };  
  
        // adding bottom dots  
        addBottomDots(0);  
  
        // making notification bar transparent  
        changeStatusBarColor();  
  
        myViewPagerAdapter = new MyViewPagerAdapter();  
        viewPager.setAdapter(myViewPagerAdapter);  
        viewPager.addOnPageChangeListener(viewPagerPageChangeListener);  
  
        btnSkip.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                launchHomeScreen();  
            }  
        });  
  
        btnNext.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                // checking for last page if true launch MainActivity  
                int current = getItem(+1);  
                if (current < layouts.length) {  
                    // move to next screen  
                    viewPager.setCurrentItem(current);  
                } else {  
                    launchHomeScreen();  
                }  
            }  
        });  
    }  
  
    private void addBottomDots(int currentPage) {  
        dots = new TextView[layouts.length];  
  
        int[] colorsActive = getResources().getIntArray(R.array.array_dot_active);  
        int[] colorsInactive = getResources().getIntArray(R.array.array_dot_inactive);  
  
        dotsLayout.removeAllViews();  
        for (int i = 0; i < dots.length; i++) {  
            dots[i] = new TextView(this);  
            dots[i].setText(Html.fromHtml("?"));  
            dots[i].setTextSize(35);  
            dots[i].setTextColor(colorsInactive[currentPage]);  
            dotsLayout.addView(dots[i]);  
        }  
  
        if (dots.length > 0)  
            dots[currentPage].setTextColor(colorsActive[currentPage]);  
    }  
  
    private int getItem(int i) {  
        return viewPager.getCurrentItem() + i;  
    }  
  
    private void launchHomeScreen() {  
        prefManager.setFirstTimeLaunch(false);  
        startActivity(new Intent(WelcomeActivity.this, MainActivity.class));  
        finish();  
    }  
  
    //  viewpager change listener  
    ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() {  
  
        @Override  
        public void onPageSelected(int position) {  
            addBottomDots(position);  
  
            // changing the next button text 'NEXT' / 'GOT IT'  
            if (position == layouts.length - 1) {  
                // last page. make button text to GOT IT  
                btnNext.setText(getString(R.string.start));  
                btnSkip.setVisibility(View.GONE);  
            } else {  
                // still pages are left  
                btnNext.setText(getString(R.string.next));  
                btnSkip.setVisibility(View.VISIBLE);  
            }  
        }  
  
        @Override  
        public void onPageScrolled(int arg0, float arg1, int arg2) {  
  
        }  
  
        @Override  
        public void onPageScrollStateChanged(int arg0) {  
  
        }  
    };  
  
    // Making notification bar transparent  
       
    private void changeStatusBarColor() {  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
            Window window = getWindow();  
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
            window.setStatusBarColor(Color.TRANSPARENT);  
        }  
    }  
  
    /** 
     * View pager adapter 
     */  
    public class MyViewPagerAdapter extends PagerAdapter {  
        private LayoutInflater layoutInflater;  
  
        public MyViewPagerAdapter() {  
        }  
  
        @Override  
        public Object instantiateItem(ViewGroup container, int position) {  
            layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  
            View view = layoutInflater.inflate(layouts[position], container, false);  
            container.addView(view);  
  
            return view;  
        }  
  
        @Override  
        public int getCount() {  
            return layouts.length;  
        }  
  
        @Override  
        public boolean isViewFromObject(View view, Object obj) {  
            return view == obj;  
        }  
  
  
        @Override  
        public void destroyItem(ViewGroup container, int position, Object object) {  
            View view = (View) object;  
            container.removeView(view);  
        }  
    }  
}  

In the MainActivity.java class, add the following code. This class checks the state returned by the SharedPreferences.

MainActivity.java

package example.javatpoint.com.introonetimefirsttime;  
  
import android.content.Intent;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.Toast;  
  
public class MainActivity extends AppCompatActivity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        PrefManager prefManager = new PrefManager(getApplicationContext());  
        if(prefManager.isFirstTimeLaunch()){  
            prefManager.setFirstTimeLaunch(false);  
            startActivity(new Intent(MainActivity.this, WelcomeActivity.class));  
            finish();  
        }  
    }  
    protected void btn_Click(View view){  
        Toast.makeText(MainActivity.this, "clicked on button", Toast.LENGTH_LONG).show();  
    }  
}  
AndroidMenifest.java
<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="example.javatpoint.com.introonetimefirsttime">  
  
    <application  
        android:allowBackup="true"  
        android:icon="@mipmap/ic_launcher"  
        android:label="@string/app_name"  
        android:roundIcon="@mipmap/ic_launcher_round"  
        android:supportsRtl="true"  
        android:theme="@style/AppTheme">  
  
        <activity android:name=".WelcomeActivity">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
        <activity  
            android:name=".MainActivity"/>  
    </application>  
  
</manifest>  

Output:

Android Introduction Slider Example Android Introduction Slider Example Android Introduction Slider Example Android Introduction Slider Example

Comment / Reply From