Android - ImageView на заставке не работает

Я хочу сделать заставку при загрузке основного действия.

Итак, я добавил активность Splash.

package com.originerd.tau;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;

public class Splash extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        Thread logoTimer = new Thread(){
            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    Intent i = new Intent(Splash.this, Main.class);
                    startActivity(i);

                    sleep(4500);
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
                finally{
                    finish();
                }
            }
        };

        logoTimer.start();
    }

}

и XML-файл activity_splash.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/splash" />

Но когда я его выполнил, на экране отображается просто черное окно и через 3 секунды отображается основная активность. Я думаю, это из-за времени загрузки изображения всплеска. Поэтому я добавил sleep(1000); перед строкой Intent i = new Intent(Splash.this, Main.class);. И это работает, но я думаю, что это не очень хорошее решение.

Я хочу знать, что является хорошим решением в этой ситуации. Целью является отображение изображения, в то время как основное действие готовит содержимое (это занимает около 3 секунд). Если есть какие-либо решения (загрузка изображения) вместо заставки, сообщите мне.


person user3242589    schedule 22.03.2014    source источник


Ответы (2)


Вместо использования метода sleep в Thread вы можете легко сделать то же самое, используя Handler.postDelayed как:

Handler handler = new Handler();
handler.postDelayed(runnable, 1000);
Runnable runnable = new Runnable() {
         @Override
          public void run() {
             Intent i = new Intent(Splash.this, Main.class);
             startActivity(i);
             handler.removeCallbacks(runnable);
    }
 };
person ρяσѕρєя K    schedule 22.03.2014
comment
Спасибо за Ваш ответ. Но время подготовки основного действия занимает около 3 секунд. Как мне это решить? - person user3242589; 22.03.2014

Насколько велико (в байтах) ваше изображение? Возможно, задержку можно минимизировать, уменьшив размер/сложность изображения с помощью графических инструментов. В качестве теста вы можете попробовать одноцветное изображение, которое должно быть довольно маленьким. Это, по крайней мере, скажет вам, является ли задержка функцией размера изображения.

person scottt    schedule 23.03.2014
comment
Размер изображения около 100Кб. Это слишком большой, чтобы показать в этом случае? Любые другие решения? - person user3242589; 23.03.2014
comment
Я попытался изменить изображение на индикатор выполнения. Но его до сих пор не показывают. Единственная задержка решения, как sleep? - person user3242589; 23.03.2014
comment
100 КБ не очень много; твоя проблема в другом. - person scottt; 24.03.2014