Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
#1

Имидж загрузки игры - Программирование Android

30.08.2012, 13:34. Просмотров 1216. Ответов 10
Метки нет (Все метки)

Здравствуйте. Задача сделать такую заставку, в которой при нажатие на кнопке старт сначала всплывает имидж «подождите» а потом загружается игра. Сначала загружаю xml (
setContentView(R.layout.main) в onCreate а при нажатие на старт делаю видимым имидж «подождите» и устанавливаю setContentView(new GameView(this));( extends SurfaceView).
Если не устанавливать setContentView(new GameView(this)); то имидж появляется (но в игру естественно не переходим), но если устанавливать то имидж не появляется и программа сразу переводит в игру GameView(this));. Подскажите пожалуйста почему при этом не появляется имидж «подождите» и как это исправить?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
public class Main extends Activity implements OnClickListener { 
    private ImageView splash;
    int bnnbn;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // если хотим, чтобы приложение постоянно имело портретную ориентацию
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
 
        // если хотим, чтобы приложение было полноэкранным
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 
        // и без заголовка
        requestWindowFeature(Window.FEATURE_NO_TITLE);
       if (bnnbn==0){
        setContentView(R.layout.main);
        }else
        if (bnnbn==2){
            setContentView(new GameView(this));
                }
        //setContentView(new GameView(this,null));
        splash = (ImageView) findViewById(R.id.splashscreen); //получаем индентификатор ImageView с Splash картинкой
//       splash.setVisibility(View.GONE);
        if (bnnbn==0){
            splash.setVisibility(View.INVISIBLE);
        }else
            if (bnnbn==2){
                splash.setVisibility(View.VISIBLE);
                    }
 
        Button startButton = (Button)findViewById(R.id.button1);
        startButton.setOnClickListener(this);
        
        Button exitButton = (Button)findViewById(R.id.button2);
        exitButton.setOnClickListener(this);
        //----------------------------------------
      
    }
    @Override
    public void onStart() {
        super.onStart();
        if(bnnbn==2){
         setContentView(new GameView(this));
     }
    }
//    @Override
//    public void onStop() {
//        super.onStop();
////        if (bnnbn==2){
////        Intent intent = new Intent();
////        intent.setClass(this, StartActivity.class);
////        startActivity(intent);
////        }
//    }
 
    /** Обработка нажатия кнопок */
    public void onClick(View v) {
                switch (v.getId()) {
                        //переход на сюрфейс
                        case R.id.button1: {
                         splash.setVisibility(View.VISIBLE); 
                             bnnbn=2;
                         setContentView(new GameView(this));
                        }break;
                         //выход
                        case R.id.button2: {
                            Intent inte = new Intent(android.content.Intent.ACTION_VIEW,
                                    Uri.parse("http://davidmd.ru/уроки-по-android/"));
                            this.startActivity(inte);
                             finish();
                        }break;
                        
                        default:
                                break;
                }
        }
}
0
Вложения
Тип файла: zip TowerDefense.zip (270.4 Кб, 11 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2012, 13:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Имидж загрузки игры (Программирование Android):

Вылетают многие игры после загрузки - Игры
Здравствуйте, у меня проблем с конкретными играми: Dragon Age: Origins Stalker Online. Другие игры работают, но не уверен что все,...

Дамп после загрузки игры Rappelz (gameguard) - BSOD
Всем привет, на компьютере раньше была эта игра, запускалась и было все хорошо, переустановил винду и как вижу что после запуска этой игры...

Ошибка при загрузки флеш-игры в браузере - Софт
Тема конечно смешная,но это обстоятельство доставляет мне часто неудобства,дело в том,что моя девушка играет в одноклассниках в "Домовята"...

После скачивания игры, после загрузки компа, открывается браузер который по умолчанию - Удаление вирусов
Добрый день! После скачивания игры, при запуске открывается браузер с сайтом (в моем случае liketour.org) который блокируется...

Сборка ПК "для себя" - игры, игры, игры! Киев, бюджет 8300 грн с монитором. - Игровой компьютер
Всем доброго времени суток. 1. Бюджет примерно 8300 грн (с монитором) 2. Украина, г. Киев, намерен покупать на http://rozetka.com.ua/...

При загрузки Винды ХР загрузка зависает на значке ХР где бегает строка загрузки и все. - Компьютерное железо
Сразу извиняюсь за повторы подобные темы были уже. Проблема вот в чем: При загрузки Винды ХР загрузка зависает на значке ХР где бегает...

10
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.08.2012, 19:34 #2
потому, что ты сменил контент.
0
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
30.08.2012, 21:11  [ТС] #3
Цитата Сообщение от V0v1k Посмотреть сообщение
потому, что ты сменил контент
но ведь я его сменил после того как сделал видимым имидж, а он не появился?
Java
1
2
3
4
5
6
7
8
 switch (v.getId()) {
                        //переход на сюрфейс
                        case R.id.button1: {
                         splash.setVisibility(View.VISIBLE); 
                             bnnbn=2;
                         setContentView(new GameView(this));
                        }break;
}
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.08.2012, 21:25 #4
ну, так он остался в предыдущем контенте. или вы думали он по контентам прыгает?)
0
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
30.08.2012, 21:44  [ТС] #5
Цитата Сообщение от V0v1k Посмотреть сообщение
ну, так он остался в предыдущем контенте. или вы думали он по контентам прыгает?)
нет, не думал, но прошлый контент не уходит до того момента пака новый не загрузится, и если как вы говорите "ну, так он остался в предыдущем контенте" значит он и должен с ним вместе быть нарисованным, может он не успевает нарисоваться (стать видимым)(и если так то почему следующий метод установки контента выполняется
Java
1
2
3
splash.setVisibility(View.VISIBLE);
//            а потом
                         setContentView(new GameView(this));
-по идее все должно идти по порядку), или здесь не по порядку методы выполняются?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.08.2012, 00:33 #6
да все по порядку идет, картинка стала видимой и мгновенно сменился контент.
0
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
31.08.2012, 08:42  [ТС] #7
Цитата Сообщение от V0v1k Посмотреть сообщение
картинка стала видимой и мгновенно сменился контент.
Если я все правильно понял "сменился контент" означает только начал загружаться (еще не нарисовался), а значит мы должны видеть картинку, пака он загружает контент (в моем проекте выложенном в начале поста - он загружается около секунды), но мы не чего не видим.
0
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
31.08.2012, 11:05 #8
Если хочешь, чтоб в момент загрузки что-то висело на экране - уводи загрузку в фоновый поток. Используй AsyncTask, и желательно установи минимальное время экрана загрузки - когда он мелькнет на полсекунды - смотрится не очень. Еще непонятно где ты присваиваешь значение bnnbn, на основании которого выбираешь контент, и непонятно зачем в onStart дублируешь то же, что и в оnCreate...
Если хочешь полноэкранный режим, отсутствие полосы с названием и фиксированную ориентацию во всех активити приложения - лучше пропиши это в манифесте (да так и читается легче) - так приложение будет знать об этом до запуска активити и при старте ты не будешь видеть еще ненастроенное окно активити.
1
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.08.2012, 12:51 #9
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
пака он загружает контент (в моем проекте выложенном в начале поста - он загружается около секунды)
контент мгновенно загружается.
0
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
31.08.2012, 15:37  [ТС] #10
Цитата Сообщение от kvaka Посмотреть сообщение
Используй AsyncTask, и желательно установи минимальное время экрана загрузки - когда он мелькнет на полсекунды - смотрится не очень.
Я тут нашел кое что AsyncTask (http://habrahabr.ru/post/114570/), но пака для меня это не легко, нет ли у тебя готового примерчика (проекта)?
Цитата Сообщение от kvaka Посмотреть сообщение
Еще непонятно где ты присваиваешь значение bnnbn, на основании которого выбираешь контент, и непонятно зачем в onStart дублируешь то же, что и в оnCreate...
тут (правда уже поздно)
Java
1
2
3
4
5
6
7
8
 public void onClick(View v) {
                switch (v.getId()) {
                        //переход на сюрфейс
                        case R.id.button1: {
                         splash.setVisibility(View.VISIBLE); 
                             bnnbn=2;
                         setContentView(new GameView(this));
                        }break;
все остальное забыл скоментить, в общем это не важно.
0
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
31.08.2012, 16:03 #11
По твоей ссылке все довольно понятно, так что сиди-разбирайся. Вот еще тебе несколько абзацев из книги Рето Маера - доходчиво:

"Использование AsyncTask
для запуска асинхронных задач

Класс AsyncTask предлагает простой и удобный механизм для переме-
щения трудоемких операций в фоновый поток. Благодаря ему вы получаете
удобство синхронизации обработчиков событий с графическим потоком, что
позволяет обновлять Представления и другие элементы пользовательского
интерфейса для отчета о ходе выполнения задачи или для вывода резуль-
татов, когда задача завершена.
AsyncTask создает, синхронизирует потоки, а также управляет ими, что
позволяет создавать асинхронные задачи, состоящие из операций, выпол-
няющихся в фоновом режиме, и обновлять пользовательский интерфейс
по их завершении.

Создание новой асинхронной задачи

Чтобы создать новую асинхронную задачу, понадобится наследовать
класс AsyncTask, как показано на примере каркаса в листинге 9.9. Ваша
реализация должна предусматривать классы для объектов, которые будут
переданы в качестве параметров методу execute, для переменных, что станут
использоваться для оповещения о ходе выполнения, а также для перемен-
ных, где будет храниться результат. Формат такой записи следующий:

Java
1
AsyncTask<[Input Parameter Type], [Progress Report Type], [Result Type]>
Если не нужно или вы не хотите принимать параметры, обновлять ин-
формацию о ходе выполнения или выводить конечный результат, просто
укажите тип Void во всех трех случаях.

Листинг 9.9.
Каркас реализации AsyncTask, в котором используются строковой
параметр и два целочисленных значения, нужных для оповещения о выполнении
работы и о конечном результате

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private class MyAsyncTask extends AsyncTask<String, Integer, Integer> {
@Override
protected void onProgressUpdate(Integer... progress) {
// [... Обновите индикатор хода выполнения, уведомления или другой
элемент пользовательского интерфейса ...]
}
@Override
protected void onPostExecute(Integer... result) {
// [... Сообщите о результате через обновление пользовательского
интерфейса, диалоговое окно или уведомление ...]
}
@Override
protected Integer doInBackground(String... parameter) {
int myProgress = 0;
// [... Выполните задачу в фоновом режиме, обновите переменную
myProgress...]
PublishProgress(myProgress)
// [... Продолжение выполнения фоновой задачи ...]
// Верните значение, ранее переданное в метод onPostExecute
return result;
}
}
Как показано в листинге 9.9, дочерний класс должен реализовать не-
сколько обработчиков событий.
• doInBackground. Принимает набор параметров тех типов, которые
определены в реализации вашего класса. Этот метод выполняется
в фоновом потоке, поэтому в нем не должно быть никакого взаимодей-
ствия с элементами пользовательского интерфейса. Размещайте здесь
трудоемкий код, используя метод publishProgress, который позволит
обработчику onProgressUpdate передавать изменения в пользователь-
ский интерфейс. Когда фоновая задача завершена, данный метод воз-
вращает конечный результат для обработчика onPostExecute, который
сообщит о нем в поток пользовательского интерфейса.
• onProgressUpdate. Переопределите этот обработчик для публикации
промежуточных обновлений в пользовательский интерфейс. При вы-
зове он синхронизируется с потоком GUI, поэтому в нем вы можете
безопасно изменять элементы пользовательского интерфейса.
• onPostExecute. Когда метод doInBackground завершает работу, конеч-
ный результат передается в этот обработчик событий. Используйте
его для обновления пользовательского интерфейса, как только ваша
фоновая задача завершена. Данный обработчик при вызове синхронизируется
с потоком GUI, поэтому внутри него вы можете безопасно
изменять элементы пользовательского интерфейса.

Запуск асинхронной задачи

Поскольку вы уже реализовали асинхронную задачу, запустите ее, соз-
дав новый экземпляр и вызвав метод execute, как показано в листинге 9.10.
Вы можете передать параметры, тип каждого из которых был указан при
реализации класса.

Листинг 9.10. Запуск асинхронной задачи

Java
1
new MyAsyncTask().execute("inputString1", "inputString2");
ПРИМЕЧАНИЕ
Каждый экземпляр класса AsyncTask может быть запущен всего один
раз. Попытка повторного вызова метода execute приведет к выбросу
исключения."
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2012, 16:03
Привет! Вот еще темы с ответами:

Кнопка загрузки файла и индикатор загрузки в этой же кнопке - JavaScript
Как из двух input &lt;form action=&quot;change_avatar.php&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt; &lt;input type=&quot;file&quot; name=&quot;file&quot;...

Полоса загрузки изображения, отобразить прогресс загрузки - jQuery
загружаю изображения на сервер с помощью аякса, подскажите как можно узнать(с помощью какой функции) полный объем картинки, и сколько уже...

LG LW20-3577 во время загрузки выдает синий экран и сразу уходит в рестарт. Потом дает меню выбора загрузки - Ремонт ноутбуков
ноутбук LG. 12 дюймов монитор. Вин Хп сервис пак 3, постоянно выдавал проверку дисков. хотя выключались корректно каждый раз. Работает...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
31.08.2012, 16:03
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru