развертывание задержки для раздувания макета - PullRequest
3 голосов
/ 19 ноября 2011

Итак, есть эта игра, которую я пытаюсь создать, и на уроках у меня хороший фон. Я хочу, чтобы игрок видел это в течение секунды или 2, прежде чем всплывет мое учебное всплывающее окно xml. Дело в том, что прозрачный всплывающий xml и фоновый xml оба появляются, как только начинается действие. Я новичок в этом и не могу понять объяснение на домашней странице разработчиков Android. Любая помощь будет высоко ценится.

package com.jibushi;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class LessonsShell extends Activity {

    private View view;

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

        setContentView(R.layout.lessons);

        final ViewGroup parent = (ViewGroup) findViewById(R.id.lessons_bg);

        Thread splashTread = new Thread() {
            @Override
            public void run() {
                try {
                    wait(1000);
                } catch (InterruptedException e) {

                } finally {
                    view();
                }
            }

            private void view() {
                // TODO Auto-generated method stub
                view = LayoutInflater.from(getBaseContext()).inflate(
                        R.layout.lessons_dialog, null);
                parent.addView(view);
            }
        };
        splashTread.start();
    }
}

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

попробуйте это:

public class LessonsShell extends Activity{
private static final int MESSAGE_SHOW_POPUP=7;
private static final long TIME_DELAY=3000;//3 seconds
private View view;
private Handler handler=new Handler(){
   handleMessage(Message msg){
      switch(msg.what){
        case MESSAGE_SHOW_POPUP:
           view();
           break;
       }
   };
};

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

setContentView(R.layout.lessons);
//this will send a message to the handler to display the popup after 3 seconds.
handler.sendEmptyMessageDelayed(MESSAGE_SHOW_POPUP,TIME_DELAY);

}

private void view() {
// TODO Auto-generated method stub
 ViewGroup parent = (ViewGroup) findViewById(R.id.lessons_bg);
 view = LayoutInflater.from(getBaseContext()).inflate(R.layout.lessons_dialog, null);
 parent.addView(view);
}

}

Обработчик - хорошая замена для таймера в Android.

То, что вы ранее делали, - это создавали фоновый поток в onCreate, пытаясь получить доступ к потоку пользовательского интерфейса оттуда. По моему опыту, это должно привести к сбою, поскольку вы не можете получить доступ к потоку пользовательского интерфейса из фонового потока.

0 голосов
/ 19 ноября 2011

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

1) показать пустой фон.

2) выполнить асинхронную задачу, где

DoinBackground()
{
wait 
}
onPostExecute()
{
addView 
}

(см. Google, если какой-либо термин неизвестен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...