如何在android中实现启动画面

时间:2011-02-17 06:26:18

标签: android

我有一个显示项目列表的应用程序。我需要在主要活动开始前显示淡出图像。 我尝试过类似的东西 在onCreate主要活动方法我开始 一个动画活动,如

Intent animationIntent=new Intent(this,AnimationActivity.class);
startActivityForResult(AnimationIntent);

在AnimationActivity.class的onCreate方法

super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView introanim = (ImageView) findViewById(R.id.imgView);
    AnimationSet StoryAnimation = (AnimationSet)AnimationUtils.
loadAnimation(this, R.anim.alphanim);
StoryAnimation.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
                AnimationSubActivity.this.finish();

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            AnimationSubActivity.this.finish();
        }
    });

    introanim.clearAnimation();
    introanim.startAnimation(StoryAnimation);

我的main.xml是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView  
android:id="@+id/imgView"
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:src="@drawable/icon"
/>
</LinearLayout>

这种方法的问题在于它显示了一个动画,但是imageview进入屏幕一段时间,主要活动带有幻灯片过渡效果

但我希望我的图像淡出,我的活动应该淡出

任何帮助将不胜感激。提前致谢

2 个答案:

答案 0 :(得分:30)

基本上,您正在寻找的是一个启动画面,它会显示您的图像,然后淡出。然后,主要活动的屏幕就会淡入。所以您可以做的是为Splash屏幕创建一个活动,然后为您可能想要调用的主要活动创建另一个活动。这将是您的启动画面活动。

public class SplashScreen extends Activity {
private static final int SPLASH_DISPLAY_TIME = 4000; // splash screen delay time

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    new Handler().postDelayed(new Runnable() {
        public void run() {

            Intent intent = new Intent();
            intent.setClass(Splash.this, NextActivity.class);

            Splash.this.startActivity(intent);
            Splash.this.finish();

            // transition from splash to main menu
            overridePendingTransition(R.animate.activityfadein,
                    R.animate.splashfadeout);

        }
    }, SPLASH_DISPLAY_TIME);
}

NextActivity是您希望淡入并取代其位置的任何活动。对于动画,您需要在资源中名为animate的文件夹中创建两个xml文件。 这是splashfadeout.xml文件

<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="4000" />

这将是activityfadein.xml文件

<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="2000" />

这些文件基本上可以让您的活动淡入淡出

答案 1 :(得分:4)

像@Manish Burman所暗示的“飞溅屏幕”并不是真实的。它实际上只是一个“全屏商业”,没有用户愿意花时间看。除了存在之外它没有任何意义,这意味着它不会掩盖该区域中的长加载时间或某些东西,就像真正的闪屏一样。

如果您要显示启动画面,那应该是因为您的初始活动需要花费相当长的时间才能加载 - 然后可以证明启动画面是合理的,向用户显示正在加载的内容或说服他该应用尚未“死亡”。

查看有关如何创建真实启动画面的this指南。