Reputation: 177
I am modifying an open source application and want to add a splash screen to it, Can some one help me in it?
When the application starts a black screen appears for 2 to 3 seconds and then the application appears.... In the code the activity main.xml is started, I have read some forums that the splash.xml file should be created and with the help of threads splash activity and main activity should be executed parallel. Is it the right approach...?
#public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
setContentView(R.layout.main);
#
Would it not be possible that I modify main.xml and put the image (splash) in main.xml so that it appears from there?
Upvotes: 4
Views: 13652
Reputation: 2972
Splash activity
public class LaunchScreen extends Activity {
public static final long TIME = 3000;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logo);
Protocol.getInstance(this);
Thread welcomeThread = new Thread() {
@Override
public void run() {
try {
sleep(TIME);
} catch (Exception e) {
Log.e(getClass().getName(), e.toString());
} finally {
startActivity(new Intent(LaunchScreen.this,MainScreen.class));
finish();
}
}
};
welcomeThread.start();
}
}
logo.xml file:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="right"
>
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo"
android:layout_centerInParent="true"
>
</ImageView>
</RelativeLayout>
in AndroidManifest :
activity android:name=".LaunchScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainScreen" android:label="@string/app_name" ></activity>
Upvotes: 3
Reputation: 919
Don't forget to consider that the user might want to quit your app before the splash-delay is over. So clear any pending runnables/messages when the user exits your app.
Example can be found here
Upvotes: 4
Reputation: 2765
Use class SplashScreen as under
public class Splashscreen extends Activity {
private static final int SPLASH_DISPLAY_TIME = 3000; /* 3 seconds */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
new Handler().postDelayed(new Runnable() {
public void run() {
Intent mainIntent = new Intent(Splashscreen.this,
MainActivity.class);
Splashscreen.this.startActivity(mainIntent);
Splashscreen.this.finish();
overridePendingTransition(R.anim.mainfadein,
R.anim.splashfadeout);
}
}, SPLASH_DISPLAY_TIME);
}
}
**Add mainfadein.xml & splashfadeout.xml in res->anim folder
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="1000">
</alpha>
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="1000" >
</alpha>
and add splash.xml just Add an ImageView and set its background as screen & add image of urchoice in layout
And make Splashscreen class as Launcher and make all other class as HOME in manifest file
Upvotes: 16