Как мне сделать заставку? - PullRequest
488 голосов
/ 30 марта 2011

Я хотел, чтобы мое приложение выглядело более профессионально, поэтому я решил создать заставку.

Как бы я его создал, а затем внедрил?

Ответы [ 31 ]

1 голос
/ 24 мая 2016

Когда-нибудь пользователь откроет SplashActivity и сразу выйдет, но приложение все равно перейдет на MainActivity после SPLASH_SCREEN_DISPLAY_LENGTH.

Для предотвращения этого: в SplashActivity вы должны проверить, заканчивается SplashActivity или нет, прежде чем перейти к MainActivity

public class SplashActivity extends Activity {

    private final int SPLASH_SCREEN_DISPLAY_LENGTH = 2000;

    @Override
    public void onCreate(Bundle icicle) {
        ...
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                if (!isFinishing()) {//isFinishing(): If the activity is finishing, returns true; else returns false.
                    startActivity(new Intent(SplashActivity.this, MainActivity.class));
                    finish();
                }

            }, SPLASH_SCREEN_DISPLAY_LENGTH);
        }                             
   }                                
}

Надеюсь, эта помощь

1 голос
/ 26 июня 2015

Как насчет сверхгибкого экрана запуска, который может использовать тот же код и определен в AndroidManifest.xml, поэтому код никогда не нужно будет менять. Я обычно разрабатываю библиотеки кода и не люблю настраивать код, потому что он небрежный.

<activity
        android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="launch_class" android:value="com.mypackage.MyFirstActivity" />
        <meta-data android:name="duration" android:value="5000" />
</activity>

Затем SpashActivity сам ищет метаданные для "launch_class", чтобы затем создать сам Intent. Метаданные «длительность» определяют продолжительность работы заставки.

public class SplashActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_splash);

    ComponentName componentName = new ComponentName(this, this.getClass());

    try {
        Bundle bundle = null;
        bundle = getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA).metaData;
        String launch_class = bundle.getString("launch_class");
        //default of 2 seconds, otherwise defined in manifest
        int duration = bundle.getInt("duration", 2000);

        if(launch_class != null) {
            try {
                final Class<?> c = Class.forName(launch_class);

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent = new Intent(SplashActivity.this, c);
                        startActivity(intent);
                        finish();
                    }
                }, duration);

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
  }
}
1 голос
/ 13 июня 2016

Хотя есть хорошие ответы, я покажу рекомендуемый Google способ:

1) Сначала создайте Theme для заставки: у вас есть тема под названием splashscreenTheme, ваша тема запуска будет:

<style name="splashscreenTheme">
  <item name="android:windowBackground">@drawable/launch_screen</item>
</style>

Примечание:

android:windowBackground уже устанавливает ваше изображение заставки №
нужно сделать это снова в пользовательском интерфейсе.

Вы также можете использовать цвет вместо рисования.

2) Установить тему для манифеста splashscreenActivity

   <activity
            android:name=".activity.splashscreenActivity"
            android:screenOrientation="portrait"
            android:theme="@style/splashscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

3) убедитесь, что файл launch_screen drawable не находится в папке drawable, если изображение не маленькое.

Это приведет к более быстрому запуску экрана запуска и избавит вас от черного экрана

Это также позволяет избежать дополнительного овердрейта

1 голос
/ 25 июня 2018

Действительно легкий и грубый подход:

  • Сначала создайте свой всплеск на следующем веб-сайте:

    https://www.norio.be/android-feature-graphic-generator/

    Выберите свой логотип и слоган, выберите свой красивый фон. измените его размер до 4096x4096.

  • Теперь загрузите это изображение и обновите его до:

    https://apetools.webprofusion.com/app/#/tools/imagegorilla

    И сгенерируйте все необходимые заставки, все устройства, все платформы.

Наслаждайтесь!

Здесь достаточно ответов, которые помогут с реализацией. Этот пост предназначался для того, чтобы помочь другим на первом этапе создания заставки!

1 голос
/ 02 апреля 2019

Вы можете добавить это в свой метод onCreate

new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    // going to next activity
                    Intent i=new Intent(SplashScreenActivity.this,MainActivity.class);
                    startActivity(i);
                    finish();
                }
            },time);

И инициализировать значение времени в миллисекундах, сколько хотите ...

private  static int time=5000;

для более подробной загрузки полного кода из этогоссылка ...

https://github.com/Mr-Perfectt/Splash-Screen

1 голос
/ 29 марта 2018

Это действительно просто в Android, мы просто используем концепцию обработчика для реализации заставки

В вашем SplashScreenActivity java файле вставьте этот код.

В ваш XML-файл SplashScreenActivity поместите любое изображение, используя imageview.

public void LoadScreen() {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {                 
                Intent i = new Intent(SplashScreenActivity.this, AgilanbuGameOptionsActivity.class);
                startActivity(i);
            }
        }, 2000);
    }
1 голос
/ 16 ноября 2017

В моем случае я не хотел создавать новую активность только для показа изображения в течение 2 секунд.Когда я запускаю MainAvtivity, изображения загружаются в держатели с помощью Picasso, я знаю, что загрузка занимает около 1 секунды, поэтому я решил сделать следующее в моей MainActivity OnCreate:

splashImage = (ImageView) findViewById(R.id.spllll);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    int secondsDelayed = 1;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            splashImage.setVisibility(View.GONE);

        }
    }, secondsDelayed * 2000);

При запускеВ приложении первое, что происходит, это отображение ImageView и удаление строки состояния путем установки флагов окна в полноэкранный режим.Затем я использовал Handler для запуска в течение 2 секунд, через 2 секунды я очищаю флажки полного экрана и устанавливаю видимость ImageView на GONE.Легко, просто, эффективно.

0 голосов
/ 03 июля 2019

В Котлине напишите этот код: -

 Handler().postDelayed({
            val mainIntent = Intent(this@SplashActivity, LoginActivity::class.java)
            startActivity(mainIntent)
            finish()
        }, 500)

Надеюсь, это поможет вам. Спасибо ........

0 голосов
/ 12 декабря 2016

Простой код, все работает:) Простой всплеск

int secondsDelayed = 1;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            startActivity(new Intent(LoginSuccessFull.this, LoginActivity.class));
            finish();
        }
    }, secondsDelayed * 1500);
0 голосов
/ 06 января 2018

Я использовал темы, чтобы сделать Flash Screen в Android.

    import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

public class HomeScreen extends AppCompatActivity{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screen_home);

        Thread thread = new Thread(){
            public void run(){
                try {
                    Thread.sleep(3 * 1000);
                    Intent i = new Intent(HomeScreen.this, MainActivity.class);
                    startActivity(i);
                } catch (InterruptedException e) {
                }
            }
        };
        thread.start();
    }
}
...