Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание анимированных часов 
:(
    Опции темы
Samuil
  Дата 23.8.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Здравствуйте Винградовцы! Вот решил выложить свой второй пример, пример по созданию часов использующих вместо стандартых цифр изображения. В архиве идут изображения используемые в программе, созданные при помощи Photoshop'а , мидлет работает под MIDP1.0, CLDC 1.0!
код:
Код

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;

public class mainMidlet extends MIDlet {
  Display disp;
  public void startApp() {
    disp = Display.getDisplay(this);
    draw drawClock = new draw();// вызываем класс draw() отвечающий за отображение часов
    disp.setCurrent(drawClock);
  }

  public void pauseApp() {}

  public void destroyApp(boolean b) {}
}


Второй класс берет часы, минуты и секунды с телефона и помещает их в int переменные, вот код:

Код

import java.util.Calendar;

public class TimerCod {
  public int hour;
  public int min;
  public int sec;

  public void time() {
    Calendar cal = Calendar.getInstance();
    hour = cal.get(11);//часы
    min = cal.get(12);//минуты
    sec = cal.get(13);//секунды
  }
}


А вот и главный код отображающий и переводящий числа в изображения:А вот и главный код отображающий и переводящий числа в изображения, старался сделать подробное описание методов и коментариев:
Код

import java.io.IOException; // Исключение вывода изображений
import javax.microedition.lcdui.*; // Канва

class draw extends Canvas implements Runnable {
  private boolean openclockThr = true; //булева для открытия потока
  private Image img[] = new Image[10]; //массив изображений цифр
  private Image displayIm; // картинка жк. дисплея
  private Image tochki; //картинка точек на дисплее

  private Thread thr = new Thread(this); // Поток отвечающий за работу часов
  private int hour, minu, secu; // Для принятия данных из класса TimerCod
  private int h_1 = 0, h_2 = 0, m_1, m_2, s_1 = 0, s_2 = 0;
  private TimerCod timer = new TimerCod(); // вызов класса TimerCod

  private String getSec_int_to_str = ""; //  используется в методе translator()
  private String getHour_int_to_str = ""; //  используется в методе translator()
  private String getMin_int_to_str = ""; //  используется в методе translator()
  private String hour_str_1, hour_str_2, minute_str_1, // Стринги используемые в методе translator()
  minute_str_2, secunde_str_1, secunde_str_2;

  private char hour_array[] = new char[2]; // массив для принятия данных часов
  private char minute_array[] = new char[2]; // массив для принятия данных минут
  private char secunde_array[] = new char[2]; // массив для принятия данных секунд

  public draw() {
    timer.time(); // вызываем класс TimerCod и метод time()
    hour = timer.hour; //присваиваем часы
    minu = timer.min; //присваиваем минуты
    secu = timer.sec; //присваиваем секунды

    for (int i = 0; i <= 9; i++) {
      try {
        img[i] = Image.createImage("/num/" + i + ".PNG"); //Грузим картинки цифр для часов
      } catch (IOException ex) {
        System.out.println("Image not loading");
      }
    }
    try {
      displayIm = Image.createImage("/num/display.PNG"); //берем картинкм из папки
      tochki = Image.createImage("/num/tochki.PNG");
    } catch (IOException ex1) {
      System.out.println("Image not loading");
    }
    thr.start(); // Стартуем поток отвесающий за обновления часов
  }

  public void translator() { //Главный метод отвечающий за изменение изменение времени
    if (secu < 59) { // Ставим ограничение на секунды
      secu++;
    } else {
      secu = 0;
      if (minu < 59) { // Ставим ограничение на минуты
        minu += 1;
      } else {
        minu = 0;
        if (hour < 23) { // Ставим ограничение на часы
          hour++;
        } else { // в противном случае на все int переменые ставим значение 0
          hour = 0;
          minu = 0;
          secu = 0;
        }
      }
    }

    getHour_int_to_str = String.valueOf(hour); //Переводим int hour в string
    getMin_int_to_str = String.valueOf(minu); //Переводим int minu в string
    getSec_int_to_str = String.valueOf(secu); //Переводим int secu в string

    //--------------------------------------------------------------------------
    if (getHour_int_to_str.length() <= 1) { // Проверяем длину строки часов, так если часы, минуты, секуды меньше 10 часов то телефон дает однозначное значение
      h_1 = 0; // Эта переменная пригодится для прорисовки цифр, отвечающая за вывод первой картинки часов
      h_2 = hour; //переменная пригодится для прорисовки второй картинки часов
    } else {
      hour_array[0] = getHour_int_to_str.charAt(0); // берем из строки символ под индексом 0 и ложим в массив hour_array
      hour_array[1] = getHour_int_to_str.charAt(1); // берем из строки символ под индексом 1 и ложим в массив hour_array

      hour_str_1 = String.valueOf(hour_array[0]); // В следующую переменную строки засовываем символ под индексом 0 из массива hour_array
      hour_str_2 = String.valueOf(hour_array[1]); // далее засовываем символ под индексом 1 из массива hour_array

      h_1 = Integer.parseInt(hour_str_1); // В int h_1 переводим строку hour_str_1(далее h_1 исполдьзуется в методе paint())
      h_2 = Integer.parseInt(hour_str_2); // Эта соответсвенно также как у предыдущая переменная
    }
    //--------------------------------------------------------------------------
    if (getMin_int_to_str.length() <= 1) { // Проверяем длину строки минут, так если часы, минуты, секуды меньше 10 часов то телефон дает однозначное значение
      m_1 = 0; // Эта переменная пригодится для прорисовки цифр, отвечающая за вывод первой картинки минут
      m_2 = minu; //переменная пригодится для прорисовки второй картинки минут
    } else {
      minute_array[0] = getMin_int_to_str.charAt(0); // берем из строки символ под индексом 0 и ложим в массив minute_array
      minute_array[1] = getMin_int_to_str.charAt(1); // берем из строки символ под индексом 1 и ложим в массив minute_array

      minute_str_1 = String.valueOf(minute_array[0]); // В следующую переменную строки засовываем символ под индексом 0 из массива minute_array
      minute_str_2 = String.valueOf(minute_array[1]); // далее засовываем символ под индексом 1 из массива minute_array

      m_1 = Integer.parseInt(minute_str_1); // В int m_1 переводим строку minute_str_1(далее m_1 исполдьзуется в методе paint())
      m_2 = Integer.parseInt(minute_str_2); // Эта соответсвенно также как у предыдущая переменная
    }
    //--------------------------------------------------------------------------
    if (getSec_int_to_str.length() <= 1) { // Проверяем длину строки секунд, так если часы, минуты, секуды меньше 10 часов то телефон дает однозначное значение
      s_1 = 0; // Эта переменная пригодится для прорисовки цифр, отвечающая за вывод первой картинки секунд
      s_2 = secu; //переменная пригодится для прорисовки второй картинки секунд
    } else {
      secunde_array[0] = getSec_int_to_str.charAt(0); // берем из строки символ под индексом 0 и ложим в массив secunde_array
      secunde_array[1] = getSec_int_to_str.charAt(1); // берем из строки символ под индексом 1 и ложим в массив secunde_array

      secunde_str_1 = String.valueOf(secunde_array[0]); // В следующую переменную строки засовываем символ под индексом 0 из массива secunde_array
      secunde_str_2 = String.valueOf(secunde_array[1]); // далее засовываем символ под индексом 1 из массива secunde_array

      s_1 = Integer.parseInt(secunde_str_1); // В int s_1 переводим строку secunde_str_1(далее s_1 исполдьзуется в методе paint())
      s_2 = Integer.parseInt(secunde_str_2); // Эта соответсвенно также как у предыдущая переменная
    }
    //--------------------------------------------------------------------------
    repaint(); // идем в метод paint();
  }

  public void paint(Graphics g) {
    g.setColor(255, 255, 255); // Цвет для заливки заднего фона
    g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight()); // Заливаем область экрана белым цветом

    g.drawImage(displayIm, 10, 10, 0); // отображаем жк
    g.drawImage(img[h_1], 20, 15, 0); // часы 1-ую цифру
    g.drawImage(img[h_2], 30, 15, 0); // часы 2-ую цифру
    g.drawImage(img[m_1], 50, 15, 0); // минуты 1-ую цифру
    g.drawImage(img[m_2], 60, 15, 0); // минуты 2-ую цифру
    g.drawImage(img[s_1], 80, 15, 0); // секунды 1-ую цифру
    g.drawImage(img[s_2], 90, 15, 0); // секунды 2-ую цифру

    g.drawImage(tochki, 40, 15, 0); // точки между часами и минутами
    g.drawImage(tochki, 70, 15, 0); //точки между минутами и секундами
  }

  public void run() {
    while (openclockThr == true) {
      try {
        Thread.sleep(1000); // Раз в секунду вызываем метод translator()
        translator(); // Вызываем метод "переводчик"
      } catch (InterruptedException ex) {
      }
    }
  }
}





--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
javastic
Дата 24.8.2006, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



А скомпилированный рабочий код можешь предоставить?
Я сейчас прошу админов форума чтобы сделали раздел Примеры в ФАКе по j2me, вот туда будем постить примеры.


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
javastic
Дата 24.8.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



Добавлено в новый раздел ФАКа "Примеры". 
Samuil, откомпилируй пожалуйста свой пример под стандартный DefaultColorPhone
и выложи.


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Samuil
Дата 24.8.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Вот пожалуйста архив с src, class, res

Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  clock.jar 42,58 Kb


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
Samuil
Дата 24.8.2006, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Вот еще jad к нему

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  clock.jad 0,27 Kb


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
Samuil
Дата 25.8.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Я вижу что кол-во скачиваний jara != jadu, ведь jar обязателен smile 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
Samuil
Дата 26.8.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Плиз пишите комменты, хочется узнать как можно решить эту проблемму более крутым способом smile 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
Antropoid
Дата 26.8.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 13
Всего: 16



Хе! Я сам jad дописал...а вот проблемы не понял smile 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Samuil
Дата 27.8.2006, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Antropoid, А проблеммы нет здесь я хотел чтобы люди выкладывали и свои алгоритмы часов smile

Добавлено @ 01:57 
Цитата

Я сам jad дописал

зачем?


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1087 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.