3.05.2013 / 12:37 | |
[Rutar] Пользователь Сейчас: Offline
Имя: Andriy Откуда: Львів Регистрация: 18.07.2011
| mrEDitor, изображение рисуетса, текст - нет Открыть спойлер Закрыть спойлер public class MyClass extends Canvas {
private Image image;
/* Переменная состояния
* 0 = картинка
* 1 = текст
*/
private int state;
public MyClass() {
state = 0;
try { image = Image.createImage("/items.png"); }
catch (Exception ex) {}
}
protected void paint(Graphics g) {
int Width = this.getWidth();
int Height = this.getHeight();
g.setColor(0xffffff);
g.fillRect(0, 0, Width, Height);
// В зависимости от состояния, рисовать:
switch (state) {
case 0: // Сост. #0, картинка
g.drawImage(image, Width/2, Height/2, Graphics.HCENTER|Graphics.VCENTER);
break;
case 1: // Сост. #1, текст
g.setColor(0xff00);
g.drawString("String ", 10, 10, 0);
break;
}
///////////////////////////////////////////////////////////////////////////////
public void run() {
// Пока состояние не станет максимальным (== 1)
while (state <= 1) {
// Рисовать снова
this.repaint();
// Следующее состояние
state++;
// Ждать 5 сек
try { Thread.sleep(5000); }
catch(Exception e) {}
}
}
}
|
3.05.2013 / 12:44 | |
Nokia_372Oc Пользователь
| [Rutar], А в чом суть данного приложения? Вывод изображения и замена его текстом, затем зациклить это?
|
3.05.2013 / 12:47 | |
mrEDitor Пользователь Сейчас: Offline
Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
| [Rutar], все потому что 8 + 16 = 24, а не 0. Я ж писал, убери ноль в drawString. Поставь константы и не парься.
|
3.05.2013 / 12:48 | |
[Rutar] Пользователь Сейчас: Offline
Имя: Andriy Откуда: Львів Регистрация: 18.07.2011
| Nokia_372Oc, заменять изображение текстом не нужно, а вообще это заставка - через 5 секунд программа должна переходить в меню - текст я сделал для простоты
|
3.05.2013 / 12:49 | |
[Rutar] Пользователь Сейчас: Offline
Имя: Andriy Откуда: Львів Регистрация: 18.07.2011
| mrEDitor, а к чему здесь 0 - с константами то же будет
|
3.05.2013 / 13:02 | |
Nokia_372Oc Пользователь
| [Rutar], Измени следующие участки кода на эти. Должно работать как надо. Я всдгда так делаю. /* Подключаем Ранебел содержащий в себе единственный метод
run();
*/
public class MyClass extends Canvas implements Runable {
//Твои переменные и т.д.
public MyClass() {
/*
Создаём и запускаем наш Поток.
*/
new Thread.this().start();
}
public void paint(Graphics g) {
// Здесь repaint(); не надо.
}
/*
А вот и наш метод
run();
*/
public void run() {
while(true) {
if(переменная >= 1) {
действие
}
repaint();
try {
Thread.sleep(20);
}catch(Exception e) {}
}}}
|
3.05.2013 / 13:07 | |
mrEDitor Пользователь Сейчас: Offline
Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
| Тьфу, насоветовал я, кто ж потоки запускать будет в конец конструктора: new Thread(this).start();
в объявление класса: class MyClass extends Canvas implements Runnable
Изменено mrEDitor (3.05 / 13:08) (всего 2 раза) |
3.05.2013 / 13:10 | |
Nokia_372Oc Пользователь
| mrEDitor, У меня всегда этот код пашет. Именно так устроин процес перерисовки в моих приложениях. P.S. Прочитал твой ориджинал пост. Изменено Nokia_372Oc (3.05 / 13:11) (всего 1 раз) |
3.05.2013 / 13:21 | |
NeiroNext Пользователь Сейчас: Offline
Имя: Михаил Откуда: Херсон Регистрация: 16.01.2010
| mrEDitor, В конце конструктора его и нужно вызывать.
|
3.05.2013 / 14:05 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Нужно вызывать не из конструкора а из собственноручно написанного менеджера потоков Изменено DominaN (3.05 / 14:05) (всего 1 раз) |