【问题标题】:How to implement splash screen in android如何在android中实现启动画面
【发布时间】:2011-10-28 23:55:15
【问题描述】:

我有一个显示项目列表的应用程序。我需要在主要活动开始之前显示淡出图像。 我试过类似的东西 在我开始的主要活动的 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>

这种方法的问题是它显示一个动画,但图像视图会出现一段时间,主要活动带有幻灯片过渡效果

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

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

【问题讨论】:

  • @user609765 如果答案解决了您的问题,请您接受

标签: android


【解决方案1】:

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

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

这些文件基本上让你的活动淡入淡出

【讨论】:

  • 为什么要使用 Handler 来启动一个 Activity 而不是仅仅在 OnCreate 中启动一个 Activity?
  • 感谢这个惊人的提示。只是提醒其他人,该文件夹应命名为“anim”而不是“animate”。干杯
  • 这段代码不是在其他线程(除了主线程)中启动其他活动吗?我很困惑。请澄清。
  • 资源目录名无效。
  • Android 已经有android.R.anim.fade_in 和android.R.anim.fade_out。它们使用不同的插值器,并且比这些短得多(500 毫秒与 2000 毫秒)。这些太长了。
【解决方案2】:

@Manish Burman 建议的“启动画面”并不是真实的。它实际上只是一个“全屏广告”,没有用户愿意花时间看。它除了在那里之外没有其他用途,这意味着它不会掩盖长时间的加载时间或该区域中的某些东西,就像真正的启动屏幕一样。

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

查看this 指南,了解如何创建真正的启动画面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2021-12-27
    相关资源
    最近更新 更多