Рисование блоков с задержкой между появлением каждого.

Ответить
HapKOT
Сообщения: 3
Зарегистрирован: 09 мар 2015, 18:03

Рисование блоков с задержкой между появлением каждого.

Сообщение HapKOT » 14 мар 2015, 13:16

Есть функция, рисующая все фигуры на экране

Код: Выделить всё

protected void onDraw(Canvas canvas) {

                    if (...) {
                        canvas.drawRect(100, 100, 200, 200, p);
                        canvas.drawRect(100, 300, 200, 400, p);
                        canvas.drawRect(100, 500, 200, 600, p);
                    }
}
Нужно каждый квадрат рисовать по очереди с интервалом 0.5 сек.
Делаю так

Код: Выделить всё


                    if (...) {
                        epoch[0] = System.currentTimeMillis()+500;
                        while (System.currentTimeMillis() <= epoch[0]) {

                        }
                        canvas.drawRect(100, 100, 200, 200, p);

                        epoch[1] = System.currentTimeMillis()+500;
                        while (System.currentTimeMillis() <= epoch[1]) {

                        }
                         canvas.drawRect(100, 300, 200, 400, p);

                        epoch[2] = System.currentTimeMillis()+500;
                        while (System.currentTimeMillis() <= epoch[2]) {

                        }
                        canvas.drawRect(100, 500, 200, 600, p);
                    }

Но 3 блока рисуются вместе после задержки в 1.5 сек.
Тогда, подумал, нужно перерисосывать после каждой задержки.
Сделал так

Код: Выделить всё


                    if (...) {
                        epoch[0] = System.currentTimeMillis()+500;
                        while (System.currentTimeMillis() <= epoch[0]) {

                        }
                        canvas.drawRect(100, 100, 200, 200, p);
                        invalidate();

                        epoch[1] = System.currentTimeMillis()+500;
                        while (System.currentTimeMillis() <= epoch[1]) {

                        }
                        canvas.drawRect(100, 300, 200, 400, p);
                        invalidate();

                        epoch[2] = System.currentTimeMillis()+500;
                        while (System.currentTimeMillis() <= epoch[2]) {

                        }
                        canvas.drawRect(100, 500, 200, 600, p);
                        invalidate();
                    }

Но 3 блока так же рисуются вместе после задержки в 1.5 сек.

Как сделать появление блоков по очереди с задержкой между каждым 0.5 сек?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Рисование блоков с задержкой между появлением каждого.

Сообщение doter.ua » 14 мар 2015, 13:52

По логике protected void onDraw(Canvas canvas) { это "1 кадр". Подготавливаешь все что нужно вывести и он выводит.
Как вариант можно сделать глобальную переменную, которая будет следить за отрисовкой.
Быдло код конечно, но я так сходу придумываю:

Код: Выделить всё

int frame = 1;
...
protected void onDraw(Canvas canvas) { 
...
if( frame == 1) рисуем фигуру1;
if( frame == 2) рисуем фигуру2;
if( frame == 3) рисуем фигуру3;

frame++;
...
Только вот не знаю нужно ли повторно рисовать фигуры добавленные ранее. Т.е. каждый новый кадр обнуляет старый либо добавляет контент поверх старого.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Ответить