Splash Screen Alpha Animation in Android

妖精的绣舞 提交于 2019-12-12 21:55:06

问题


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.

  1. Fade-in time (1000 ms)
  2. Wait (1000 ms)
  3. Fade-out time (1000 ms)
  4. Wait (1000 ms)
  5. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!