| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Канва на весь экран. Как такое реализовать? |
| Автор: javastic 26.4.2005, 10:34 |
| Приветствую вас винградовцы! Дисплей моего телефона 128x160 точек. Сверху у меня строка состояния (на ней отображается уровень заряда батареи и пр. служебная информация), снизу строка для командных клавишь. Я запрашиваю getWidth() и getHeight() и мне возвращается резултат: 128x128 точек, т.е. 32 точки сжираются этими строчками. В некоторых приложениях я видел что экран задействован полностью, помогите советом как это сделать? |
| Автор: AntonSaburov 26.4.2005, 11:46 |
| Очень сильно подозреваю, что это может зависеть от модели телефона. |
| Автор: javastic 26.4.2005, 11:47 |
| Т.е. лучше не предпринимать нестандартных ситуаций чтобы потом не возиться с совместимостью? |
| Автор: AntonSaburov 26.4.2005, 11:53 |
| Думаю что так. Но вполне может быть, что все не так уж и страшно - допускаю, что какие-нибудь System properties содержат внутри себя всякие параметры типа высоты верхней строки или еще чего. В таком случае может быть и можно использовать такую штуку - она не выпадает из общих вызовов, т.е. такие вызовы не влияют на переносимость. Если нет такого параметра - ну на нет и суда нет. А если есть - почему бы не попробовать. |
| Автор: Andrey Spirin 27.4.2005, 17:29 |
| Status bar нельзя будет зарисовать. Soft key bar можно, используя Canvas (только не сможем тогда CommandListener использовать). Придёся свой листенер писать, то есть слушать кнопки через KeyPressed и делать свои обработки. Например сделай заливку Canvas каким либо цветом. В цикле перебери с 0 до пусть будет 128, увидишь результат |
| Автор: javastic 28.4.2005, 09:05 | ||
Я почему спрашивал, потому что видел приложения которые "заливают" весь экран и статус бар в том числе. |
| Автор: Andrey Spirin 29.4.2005, 09:10 |
| Java тут уже тогда не причём, не положено J2ME методам весь экран телефона получать, если этого не разрешено нативным кодом в самом телефоне. Так что тут уже точно никак. Если только сами свою JVM напишите и в телефон спортируете Кстати, данная функциональнасть с заливкой на весь экран происходила на каких то определённых девайсах? (нельзя ли было списочек хотябы, просто интересно) |
| Автор: javastic 29.4.2005, 09:34 |
| Это телефон SonyEricsson k500i, я сделал две фотки из двух игр, на первой фотке можно увидеть что канва перекрывает весь экран http://www.vitalich.com/j2me/images/29-04-05_1036.jpg на второй видны статусная и коммандная строки http://www.vitalich.com/j2me/images/29-04-05_1025.jpg p.s. фотки делались между прочем на Motorola V600 |
| Автор: Andrey Spirin 29.4.2005, 09:46 |
| скорее всего использовалось специфичное API, специально предназначеное для SonyEricsson, в первой игрушке. Стандартным сановским API это точно не возможно. Попробуй первую игрушку запустить, ну хотя бы на том же самом V600. Больше чем уверен, что даже проинсталироваться она у тебя не сможет в Moto |
| Автор: javastic 29.4.2005, 10:01 |
| Вполне вероятно. Только эта игра не передаётся, т.к. наложены видимо секьюрити на распространение. |
| Автор: Dancer 29.4.2005, 10:09 |
| На каждую хитрую Ж... как говорится, найдётся свой .... с ВИНТОМ. Да, я знаю, что эти вещи защищаются и всё такое. Можно в принципе в интернете поискать, должно что-то уже быть что позволяет обратится к файловой системе телефона. Попробуй, может быть чего нить найдёшь. Я с SonyEricsson не работал, так что здесь ничего не могу сказать. Поиск по Gogle рулит! Если можно будет обратится из какой то тулзины (не из самого телефона, через JSR-75 API) к файловой системе телефона, то скорее всего спокойно можно будет вытащить jad и jar файлики. Дерзай! Если чего найду, то сообщу. |
| Автор: Dancer 29.4.2005, 10:20 |
| попрбуй здесь посмотреть http://www.google.ru/search?hl=ru&q=SonyEricsson+K500+filesystem+tool&lr= поиграйся со словами в запросе. Более некогда в форуме быть |
| Автор: javastic 3.5.2005, 09:27 |
| Привет. Например есть такая тулза http://sourceforge.net/projects/fma/, я ей когда-то пользовался, но она у меня глючит ужасно, а так функцонал хороший. Вот более крутая штука http://edesktop.sourceforge.net/, в которая даже есть Net Monitor gsm сети. |
| Автор: Dancer 3.5.2005, 12:34 |
| Хорошо, используя эти тулзы ты можешь до файловой системы добраться. Ты эти закрытые файлики можешь выковырять этими тулзами? Пробовал нати JAD/JAR файлы? Хоть какие нибудь смог вытащить из телефона? |
| Автор: javastic 3.5.2005, 12:37 |
| Dancer, ещё не пробовал, но думаю что смогу без проблем. Чуть-чуть освобожусь и вытяну их из недр =) |
| Автор: Dancer 17.5.2005, 12:01 | ||
| я так думаю это будет решение всех проблем. setFullScreenMode(boolean mode) это стандартный метод для Canvas. Кнопки софтварные самому придётся писать и обрабатывать. Этим методом нельзя закрасить статус бар. Так что извиняйте Думаю, простенький код этому сможет помочь. в классе наследуемом от Canvas делаю вызов this.setFullScreenMode(true) что означает, что моя канва всегда будет на весь экран, не включая статус бар.
Спасибо за внимание, Андрюха |
| Автор: Nemesis 4.6.2005, 19:00 | ||||
Зачем говорить, что приложения в полный экран встречаются редко? Их уйма на самом деле. Любая нормальная игра показывается во весь экран и заливает всю область. И дело не в модели телефона. А реально нужен АПИ, вот где его можно найти... Это уже друой вопрос. А насчет этого:
довольно странно, поскольку функции,т.е. методы класса Display возвращают истинные размеры экрана без всяких "урезок". Быть может ты все-таки использовал getClipHeight() и getClipWidth() ? |
| Автор: javastic 6.6.2005, 09:45 |
| Nemesis нет именно getWidth() и getHeight(), вот поэтому для меня это и стало удивительно |
| Автор: Nemesis 6.6.2005, 19:08 |
| Да, действительно, для полного экрана достаточно вызвать метод setFullScreenMode(true) и экран переводится в полноэкранку. CommandListener новый писать не нужно, клавиши итак обрабатываются, просто нажимая какую-либо функциональную клавишу выпадает список меню с нужными действиями. По поводу getWidth() и getHeight() даже не знаю На эмуляторе программа работает прекрасно, все хорошо и без глюка, но вот стоит перенести на реальный телефон приложение и появляется след: Приложение работает в графическом режиме, скажем бегает там мячик, нажимаю клавишу с информацией о телефоне и - на эмуляторе все в порядке, т.е. экран перерисовывается и выводится инфа в Form в виде StringItem. - на телефоне задний(графика) экран не перерисоваля и инфа выводится поверх этого дела, но ! стоит нажать клавишу вверх В чем здесь может быть ошибка? Кому интересно, могу код показать. Но хотелось бы разрешить эту проблему. Может быть дело в телефоне? Ведь эмулятор нормально работает, причем тестил на достаточном кол-ве эмуляторов( где-то на 6-ти). |
| Автор: javastic 7.6.2005, 09:54 |
| Давай, запости код, я думаю кому-то будет интересно. |
| Автор: Nemesis 7.6.2005, 12:14 | ||
| Вот код.Только там все без коммента, но я думаю итак все понятно. Опущен класс отвечающий за спрайт, да он тут и не особо-то и нужен.
Надеюсь код понятен,если что, распишу все. |
| Автор: Zandr 29.6.2005, 13:00 | ||
Мдя, ребята, setFullScreenMode() это конечно хорошо, только в спецификации MIDP1.0 его еще нет... Так что делайте две канвы (под MIDP1 и MIDP2) с конструкторами по умолчанию. Выносите методы, которые вызываются извне, в интерфейс, добавляйте, что эти Canvas implements ваш интерфейс, а в мидлете (или где вы создаете вашу канву) создавайте ее ч-з:
Можно даже без интерфейса обойтись. Просто пишется MyCanvas и MyFullScreenCanvas (которая наследует от MyCanvas и делает вызовы к setFullScreen.....). А в приложении определяется MIDP и по результату загружается нужный класс канвы, с помощью которого создается инстанс, который потом кастится в MyCanvas. Извне естественно fullScreenMode менять нельзя, только из MyFullScreenCanvas. |
| Автор: NickTo 3.8.2005, 11:21 | ||
чтоб в игре перекрыть статусбар.. попробуй в констукторе прописать следующий метод
|
| Автор: javastic 8.8.2005, 15:58 | ||
Nikolka52 мы не поддерживаем и не приветствуем взлом чужих программ, Мы пытаемся делать их сами.
|
| Автор: Steeller 14.9.2005, 16:10 |
| Канва на весь экран реализуется сугубо под каждую платформу отдельно. Например, в Нокии вместо Canvas используется FullCanvas public class Game extends FullCanvas implements Runnable {... И т.д. Добавлено @ 16:11 При этом нужно обязательно подключить специфичную библиотеку. Для Нокии, опять же: import com.nokia.mid.ui.*; |
| Автор: W0LF 9.2.2006, 19:27 | ||
блин, а что такое не работает в MIDP2 (ну для к500i точно работатет):
??? упс. вторую страницу не дочитал с первым MIDP повозиться надо |