Перенос графического кода AWT на Android

#java #android #graphics #awt #porting

#java #Android #графика #awt #перенос

Вопрос:

Мы хотели бы использовать некоторые из наших существующих графических кодов Java AWT на платформе Android. Насколько я могу судить, Android не включает ни один из классов AWT — no Graphics2D , Path2D , FontMetrics и т.д.

Каков наилучший подход к переносу нашего графического кода на Android? В идеале мы хотели бы изменить нашу кодовую базу, чтобы она была нацелена как на Android, так и на общую Java.

Комментарии:

1. Ознакомьтесь с проектом awt-android-compat: code.google.com/p/awt-android-compat . К сожалению, в последнее время особой активности не было, так что это все еще на очень ранней стадии. Кажется, во внутреннем коде Android есть некоторые ссылки на AWT, но использовать его напрямую кажется невозможным. Возможно, это могло бы быть полезно при внесении вклада в проект awt-android-compat? Я не уверен. grepcode.com/file/repository.grepcode.com/java/ext /…

2. совместимость awt с Android: не работает, слишком много проблем.

3. Вот оболочка, которую я создал для графических API, она не полностью завершена, но обладает большим функционалом. pastebin.com/b5TFWSqQ

Ответ №1:

Платформа Android поддерживает небольшое подмножество awt. Под небольшим я подразумеваю, что он поддерживает шрифты awt. Переход с java swing (вы действительно используете awt просто как автономный пользовательский интерфейс?) на Android станет шоком для системы. Пользовательский интерфейс Android определяется в файлах ресурсов XML, и эти ресурсы загружаются в классы Activity, которые представляют логическую единицу приложения. Canvas’ заменяет объекты Graphics2D, и они имеют несколько иную функциональность.Система пользовательского интерфейса Android стремится избежать абсолютного позиционирования, которое распространено в интерфейсах Java. И для Android нужно учитывать гораздо больше, например, различные размеры экрана и различия в разрешении. Ни то, ни другое не было большой проблемой для Java SE. Чтобы ответить на ваш вопрос: у вас есть своя работа, и вам придется начинать большую часть своего кодирования с нуля.

Я не уверен, что означает «код рисования», но в моем случае у меня есть большое количество кода анимации, который отображается с помощью awt shapes. Это воспроизводимо на Android, поскольку существуют объекты graphics.drawable.shapes, и можно отображать примитивные фигуры, выполняя что-то вроде canvas.drawCircle(x, y, z, h) (вам что-то напоминает?). Но когда я портировал его, это было сложно, и мне казалось, что я заставляю Android делать то, чего он действительно не хотел и не собирался делать. Трудно точно ответить на ваш вопрос, учитывая его расплывчатость.

Комментарии:

1. Вы написали «Система пользовательского интерфейса Android стремится избежать абсолютного позиционирования, что является обычным явлением в интерфейсах Java». Я думаю, что позиционирование одинаково в обеих системах. Можете ли вы объяснить, где я ошибаюсь? Справочная информация: У меня похожая проблема. Должен ли я реализовать часть кода java.awt, который используется только для структурирования, а не для рисования. например, как awt.Rectangle2D? Или я должен полностью реорганизовать приложение в Android. Если бы мне понадобился рефакторинг, я думаю, это потребовало бы больших усилий. С другой стороны, я действительно не знаю, каковы будут последствия, если я попытаюсь имитировать java.awt.

Ответ №2:

Я не думаю, что вы можете перенести AWT на Android. Я имею в виду, это Java SE против ее подмножества (или обновленная Java ME со стероидами, как вам больше нравится).

Однако есть несколько классов пользовательского интерфейса для Java ME, которые отлично работают на Android. Лично мне нравится LWUIT, но он не единственный.

Ответ №3:

appengine-awt — это чистая Java-реализация пакетов java.awt и javax.imageio для использования в среде Google AppEngine.

https://github.com/witwall/appengine-awt

SwingWT — это на 100% чистая Java-библиотека, которая призвана стать бесплатной реализацией Swing и AWT. В отличие от Swing, он использует собственные одноранговые виджеты для вашей платформы из SWT.

https://github.com/witwall/SwingWT