我的应用在启动画面

时间:2018-05-07 13:41:08

标签: android crash screen splash

您好我正在开发应用程序并且我正在制作一个启动屏幕然后将其带到注册屏幕。应用程序在启动画面后崩溃。

splashscreen.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splashscreen);
    Animation anim1 = AnimationUtils.loadAnimation(this,R.anim.anim_down);
    ImageView img =(ImageView)findViewById(R.id.imageView);
    img.setAnimation(anim1);

    ProgressBar mprogressBar = (ProgressBar) findViewById(R.id.progressBar);
    ObjectAnimator anim = ObjectAnimator.ofInt(mprogressBar,"progress",0,100);
    anim.setDuration(4000);
    anim.setInterpolator(new DecelerateInterpolator());
    anim.start();

    Handler handler = new Handler();

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            startActivity(new Intent(splashscreen.this,signup.class));

        }
    },3000);

}

AndroidManfiest.xml

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity" />
    <activity android:name=".splashscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".login" />
    <activity android:name=".signup" />
    <activity android:name=".ResetPasswordActivity" />
</application>

什么是错的?请帮忙

1 个答案:

答案 0 :(得分:0)

如果您提供错误日志会更好。但我所看到的是你给了你的ObjectAnimator动画对象4000毫秒。

另一方面,在3000毫秒后,您将用户转移到注册活动。

因此,一旦加载了注册活动,对象将无法找到启动画面上下文。这可能是应用程序崩溃的原因。

你可以解决它

 handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(new Intent(splashscreen.this, signup.class));
        }
    }, 4000);

或者您可以将动画侦听器用于 ObjectAnimator

 ObjectAnimator anim =
            ObjectAnimator.ofInt(mprogressBar, "progress", 0, 100);
    anim.setDuration(4000);
    anim.setInterpolator(new DecelerateInterpolator());
    anim.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            startActivity(new Intent(splashscreen.this, signup.class));
        }
    });
    anim.start();

在我看来,第二种方法更好,因为它可以确保完成动画。

同时检查 anim_down 动画时长。