2016-05-26 2 views
0

Я пытаюсь создать приложение, которое показывает первый макет в течение 5 секунд и после перехода к макету индекса (Главная). Первый макет показывает только логотип и название приложения ...Кодирование экрана заставки

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    SystemClock.sleep(5000); 
    Intent i = new Intent(this, Home.class); 
    startActivity(i); 
} 

Если я закомментировать SystemClock.sleep(5000); Intent i = new Intent(this, Home.class); startActivity(i);, приложение работает, как я ожидал. Покажите первый макет, оставаясь в этом макете (очевидно, я не запускаю ничего другого: P). Но, если я откажусь от них, активность будет ждать 5 секунд, не показывая ничего (пустая макет).

Любые идеи?

Спасибо, ребята.

+1

Использование обработчика. postDelayed –

+0

Работает. Спасибо –

+1

Это работает уродливо. Почему вам нужен Handler? Использовать очередь View !!! –

ответ

1

Для того, чтобы показать заставку на вашем приложении вы не должны показать макет, попробуйте поставить основной поток на спящий режим в течение 5 секунд и снова запустить приложение. «Правильный» способ (нет правильного способа отображения заставки, так как экраны всплесков почти запрещены в мобильных приложениях), чтобы показать заставку, создайте новый Activity или Fragment, который содержит этот экран, и используя Handler.postDelayed внутри этого действия подождите 5 секунд, а затем покажите свое основное действие.

Полезная информация о заставок:

https://www.bignerdranch.com/blog/splash-screens-the-right-way/

+0

Спасибо. Но для моей пользы я предпочитаю выбор Петрова. Я могу решить, как низкий пользователь ждет. Даже я могу показать анимацию. Но, опять же, это будет полезно в будущем ... –

1

Я думаю, вы ищете что-то вроде Splash Screen, которое оно показывает в течение нескольких секунд, и начинается основное действие?

Ну, чем вы можете использовать что-то вроде этого:

public class ActivitySplash extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view_splash); 
    Firebase.setAndroidContext(this); 

    starter(); 
} 

//Thread for the timer with 3.5 secs. 
private void starter() 
{ 
    Thread timer = new Thread(){ 
     public void run(){ 
      try{ 
       //Sleep for 5 seconds. 
       sleep(5000); 
      } 
      catch(InterruptedException e){ 
       e.printStackTrace(); 
      } finally { 

       //Call and start the new Activity 
       Intent newActivity= new Intent(ActivitySplash.this, YOURACTIVITY.class); 
       startActivity(newActivity); 
       finish(); 
      } 
     } 
    }; 
    timer.start(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    finish(); 
} 
} 

показать логотип в макет, просто сделать XML с логотипом в центре с именем, которое вы хотите ввести. здесь это один я использую:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".ActivitySplash"> 

    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView" 
    android:src="@mipmap/ic_launcher" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentBottom="true" /> 
</RelativeLayout> 
1

попробовать этот способ ..

new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       Intent i = new Intent(MainActivity.this, Home.class); 
       startActivity(i); 
      } 
     }, 5000); 

вместо этого, если

SystemClock.sleep(5000); 
+0

Ну, для этого вам не нужен Handler. –

+0

Спасибо, vrund. Оно работает.Мне нужно было только изменить: Intent i = new Intent (MainActivity.this, Home.class); startActivity (i); –

+0

рад слышать, что .. Примите, если у вас ноги правильный ответ. –

1

Не создавать обработчики и потоки, которые не нужны! Ваша задача может быть сделано следующим образом:

getWindow().getDecorView().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       //start activity here 
      } 
     }, 500); 

Не создавайте больше мусора для сборщика мусора.

Хотя, вы должны упомянуть ActivityTransition. Это то, что вы действительно ищете? Если нет, вы можете просто добавить в свой вид всплывания макета, который будет перекрывать все содержимое, и вы могли бы воспроизводить пользовательские анимации на этом всплеске. Например:

getWindow().getDecorView().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // splash would disappear after 400 ms 
      mSplashView.animate().alpha(0).setDuration(400).start(); 
     } 
    }, 500); 
+0

Он также работает. И мне нравится ваш подход. Избегайте создания мусора ... Спасибо Петров –

2

Не заставляйте время ожидания в приложениях показывать экран заставки, вы теряете время пользователя. Чтобы сделать заставку в правильном направлении, вы можете использовать опцию windowBackground в своей теме приложения. Вот пример: https://www.bignerdranch.com/blog/splash-screens-the-right-way/

+0

Спасибо. Но для моей пользы я предпочитаю выбор Петрова. Я могу решить, как низкий пользователь ждет. Даже я могу показать анимацию. Но, опять же, это будет полезно в будущем ... –

Смежные вопросы