问题
I want to display a splash screen animation where an image fades in and then fades out. I want the second activity to load after the image has faded out.
- Fade-in time (1000 ms)
- Wait (1000 ms)
- Fade-out time (1000 ms)
- Wait (1000 ms)
- Load second Activity
How do I go about this? The code I'm currently using is:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ImageView;
public class Splash extends Activity
{
ImageView img;
Thread timer;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
img = (ImageView) findViewById (R.id.imgSplash);
img.startAnimation(FadeIn(1000));
try
{
Thread.sleep(1000);
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
img.startAnimation(FadeOut(1000));
try
{
Thread.sleep(1000);
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
timer.start();
Intent intent = new Intent();
intent.setClass(Splash.this,MainScreen.class);
startActivity(intent);
}
public void onPause()
{
super.onPause();
finish();
}
private Animation FadeIn(int t)
{
Animation fade;
fade = new AlphaAnimation(0.0f,1.0f);
fade.setDuration(t);
fade.setInterpolator(new AccelerateInterpolator());
return fade;
}
private Animation FadeOut(int t)
{
Animation fade;
fade = new AlphaAnimation(1.0f,0.0f);
fade.setDuration(t);
fade.setInterpolator(new AccelerateInterpolator());
return fade;
}
}
Please help.
回答1:
You can do it using an AnimationSet. The Animation.setStartOffset()
method allows to say when the animation should start (0 for the fadeIn and 2000 for the fadeOut). The next Activity is launched after 3 seconds using a Handler.postDelayed()
.
private final Handler handler = new Handler();
private final Runnable startActivityRunnable = new Runnable() {
@Override
public void run() {
Intent intent = new Intent();
intent.setClass(Splash.this,MainScreen.class);
startActivity(intent);
}
};
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
img = (ImageView) findViewById (R.id.imgSplash);
setContentView(img);
}
@Override
protected void onResume() {
super.onResume();
AnimationSet set = new AnimationSet(true);
Animation fadeIn = FadeIn(1000);
fadeIn.setStartOffset(0);
set.addAnimation(fadeIn);
Animation fadeOut = FadeOut(1000);
fadeOut.setStartOffset(2000);
set.addAnimation(fadeOut);
img.startAnimation(set);
handler.postDelayed(startActivityRunnable, 3000);
}
public void onPause()
{
super.onPause();
handler.removeCallbacks(startActivityRunnable);
}
来源:https://stackoverflow.com/questions/11455455/splash-screen-alpha-animation-in-android