当前位置: 首页 > 知识库问答 >
问题:

Splash动画在Android中只显示一次

封飞
2023-03-14

闪屏应该在我每次使用应用程序时都能工作,但一旦我从任务管理器中清除应用程序并重新启动它。

动画不会出现,它会直接进入登录屏幕,不会出现动画。

package com.example.promilek;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

@SuppressLint("CustomSplashScreen")
public class SplashScreen extends AppCompatActivity {

    private static final int SPLASH_SCREEN = 2000;

    //Variables
    Animation topAnim;
    ImageView ImageViewButla;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow() .setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_splash_screen);

        topAnim= AnimationUtils.loadAnimation(this, R.anim.top_animation);

        ImageViewButla = findViewById(R.id.imageViewButla);

        ImageViewButla.setAnimation(topAnim);

        new Handler() .postDelayed(() -> {
            Intent intent = new Intent(SplashScreen.this, Login.class);
            startActivity(intent);
            
            finish();
        },SPLASH_SCREEN);
    }
}

共有1个答案

邵祺
2023-03-14

在我的解决方案中,我将使用Thread类来实现这一点。至少这会让你对活动生命周期方法有更多的控制。

我还提供了一个SessionManager,可以在您现在或以后需要时提供帮助。

@SuppressLint("CustomSplashScreen")
public class SplashScreen extends AppCompatActivity {

    private static final int SPLASH_SCREEN = 2000;


    //Variables
    Animation topAnim;
    ImageView ImageViewButla;
    private Thread counterThread;

    Context mContext;
    private SessionManager sessionManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow() .setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_splash_screen);


        mContext = getApplicationContext(); // Get application context


        topAnim = AnimationUtils.loadAnimation(this, R.anim.top_animation);
        ImageViewButla = findViewById(R.id.imageViewButla);
        ImageViewButla.setAnimation(topAnim);

        sessionManager = new SessionManager(mContext); // Initialize Session manager object


        // Counter thread
        counterThread = new Thread() {
            @Override
            public void run() {

                try {

                    int wait = 0; // Thread wait time

                    // Loop
                    while (wait < SPLASH_SCREEN) {

                        sleep(100); // Sleep
                        wait += 100;
                    }

                    Intent intent;
                    if (sessionManager.isSignedIn()) {

                        // Launch MainActivity
                        intent = new Intent(SplashActivity.this, MainActivity.class);

                    } else {

                        // Launch Signin or SignUp activity
                        intent = new Intent(SplashActivity.this,
                            SignInSignUpActivity.class);
                    }

                    startActivity(intent); // Start activity
                    finish(); // Exit Activity

                } catch (Exception ignored) {
                } finally {

                    finish(); // Exit Activity
                }
            }
        };
    }
}


    @Override
    public void onBackPressed() {
        super.onBackPressed(); // Exit
        counterThread.start(); // Start thread
    }

    @Override
    public void onResume() {
        super.onResume();

        counterThread.start(); // Start thread
    }

    @Override
    protected void onStop() {
        super.onStop();

        counterThread.interrupt(); // Interrupt thread on activity exit
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        counterThread.interrupt(); // Interrupt thread on activity exit
}

下面是会话管理器的代码

public class SessionManager {

    private static final String KEY_IS_SIGNED_IN = "isSignedIn";
    private static String PREFERENCE_NAME; // Shared Preference File Name

    // Shared Preference
    private final SharedPreferences sharedPreferences;
    private final SharedPreferences.Editor editor;

    // Shared Preference mode
    int PRIVATE_MODE = 0;

    @SuppressLint("CommitPrefEdits")
    public SessionManager(Context context) {

       this.sharedPreferences = context.getSharedPreferences(PREFERENCE_NAME, PRIVATE_MODE);
        this.editor = sharedPreferences.edit();
        PREFERENCE_NAME = context.getResources().getString(R.string.app_name) +
            "_SessionManagerPreference";
    }

    public boolean isSignedIn() {
        return sharedPreferences.getBoolean(KEY_IS_SIGNED_IN, false);
    }

    public void setSignedIn(boolean isLoggedIn) {
        editor.putBoolean(KEY_IS_SIGNED_IN, isLoggedIn);
        editor.commit(); // Commit Changes
    }
}
 类似资料:
  • 问题内容: 您好,我正在使用Swing在Java 1.6上编写GUI应用程序。 我有一个弹出屏幕,该窗口在加载Swing gui时以及稍后会显示gif动画。 我的弹出屏幕是一个JDialog。动画应显示在通过以下方式添加到Jdialog的JLabel上: 现在的事情是,动画仅在gui加载后显示。我相信在GUI加载时(这是我的应用程序中的繁重操作),EDT太忙了,无法运行动画。 现在的问题是,将GU

  • 问题内容: 我有一个Android应用程序,其中显示了3秒钟的“启动画面”。之后,MainActivity被加载。 不幸的是,MainActivity需要额外的〜4秒来加载。首次启动时间更长。但是,在加载该应用程序后,一切都会顺利进行。 现在如何在启动屏幕显示期间实现MainActivity的加载?它只应显示一个图像,直到整个东西完全加载为止。我已经阅读了有关Async- Task的信息,但不确定

  • 问题内容: 我想在应用程序中显示GIF动画图像。我发现,Android本身并不支持动画GIF的困难方式。 但是,它可以使用AnimationDrawable显示动画: 开发>指南>图像和图形> Drawables概述 该示例使用在应用程序资源中另存为帧的动画,但是我需要直接显示动画gif。 我的计划是将动画GIF分解为帧,并将每个帧作为可绘制对象添加到AnimationDrawable中。 有谁知

  • 问题内容: 我正在尝试制作一个程序来使用Tkinter显示动画GIF。这是我最初使用的代码: test.gif是以下GIF: 这可以正常工作,但是GIF的质量很糟糕。我尝试将其更改为以下内容: 但是,这偶尔会闪烁图像。虽然图片看起来不错,但是作为程序却毫无用处。我究竟做错了什么? 问题答案: 首先,您要为每个帧创建一个新的画布对象。最终,您将有成千上万的图像相互叠加。这是非常低效的;当您开始具有数

  • 在你把我和另一个类似的问题联系起来之前,比如这个或那个。我要说的是,我完全按照答案所说的做了,但我的gif不会像它应该做的那样动画化(尽管它是显示出来的)。 下面是我在一个函数中所做的操作,该函数通过主应用程序函数堆栈显示。导航容器和堆栈中的屏幕。导航器。(我使用React导航在屏幕上移动,这里的上下文是按下一个按钮,它显示DetailsScreen函数的内容) 这将显示我的gif的第一个静态图像

  • 它与文件一起工作很好,但是当我使用文件时,它是空的。我在某处读到了将重命名为,但它只显示一帧动画gif而没有动画。有什么想法吗?