Android: проблема с заставкой

1

Я создал заставку, используя следующий код:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.splash_layout);

    Thread splashThread = new Thread() {
        @Override
        public void run() {
            try {
                int waited = 0;
                while (_active && (waited < _splashTime)) {
                    sleep(100);
                    if (_active) {
                        waited += 100;
                    }
                }
            } catch (InterruptedException e) {
                // do nothing
            } finally {
                _active = false;
                finish();
                startActivity(new Intent(SplashActivity.this, MyMainActivity.class));
            }
        }
    };

    splashThread.start();
}

есть вид изображения в splash_layout, после того, как экран заставки появляется в течение некоторого времени и исчезает, тогда начинается MyMainActivity, проблема в том, что после исчезновения всплеска и до того, как MyMainActivity запустится, я мог видеть предыдущий экран (не относящийся к моему приложению, например, рабочий стол с виджетами или предыдущим запущенным приложением), как сделать переход беглым, чтобы экран заставки напрямую перешел в MyMainActivity?

Спасибо!

Теги:
android-activity
splash

5 ответов

0
Лучший ответ

Для вашей справки, вот лучший пример для Android - пример экрана Splash.

1

Можете ли вы попробовать это, я не уверен, что это 100% -ная работа, но попытка может быть полезна.

protected int _splashTime = 3000;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_layout);
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            finish();
            startActivity(new Intent(SplashActivity.this, MyMainActivity.class));
        }
    }, _splashTime);
}
  • 0
    Спасибо, я попробовал, результат тот же, я все еще мог видеть рабочий стол или предыдущее приложение, когда всплеск исчезает до начала действия.
  • 0
    Я изменил файл макета, теперь он работает, я добавил черный цвет фона для линейного линейного макета изображения.
Показать ещё 1 комментарий
1

Попробуйте позвонить finish() после startActivity().

  • 0
    Я пытался, но не повезло.
0
private static final long SPLASH_SCREEN_MS = 2500;

private long mTimeBeforeDelay;
private Handler mSplashHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    // Create a new Handler.
    mSplashHandler = new Handler();
}

@Override
protected void onResume() {
    super.onResume();
    // The first time mTimeBeforeDelay will be 0.
    long gapTime = System.currentTimeMillis() - mTimeBeforeDelay;
    if (gapTime > SPLASH_SCREEN_MS) {
        gapTime = SPLASH_SCREEN_MS;
    }
    mSplashHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
            startActivity(intent);
            SplashScreenActivity.this.finish();
        }
    }, gapTime);
    // Save the time before the delay.
    mTimeBeforeDelay = System.currentTimeMillis();
}

@Override
protected void onPause() {
    super.onPause();
    mSplashHandler.removeCallbacksAndMessages(null);
}
-2

Вы можете попробовать этот код: 1

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        // interesting music
        /**
         * Gets your sound file from res/raw
         */
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }

Удачи!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню