Android中的Splash Screen Alpha动画

时间:2012-07-12 15:39:16

标签: android android-animation splash-screen thread-sleep

我想显示一个闪屏动画,其中图像淡入然后淡出。我希望在图像淡出后加载第二个活动。

  1. 淡入时间(1000毫秒)
  2. 等待(1000毫秒)
  3. 淡出时间(1000毫秒)
  4. 等待(1000毫秒)
  5. 加载第二项活动
  6. 我该如何解决这个问题?我目前使用的代码是:

    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;
        }
    }
    

    请帮忙。

1 个答案:

答案 0 :(得分:3)

您可以使用AnimationSet来完成。 Animation.setStartOffset()方法允许说明动画应该何时开始(0表示fadeIn,2000表示fadeOut)。使用Handler.postDelayed()

在3秒后启动下一个活动
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);
}