Картина javax.microedition.lcdui.Graphics на LWUIT Компонента

голоса
0

Что было бы лучшим способом для получения пользовательского элемента (который использует J2ME родную графики) написано на LWUIT элементов?

Пользовательский элемент является реализацией из картографической библиотеки, который рисует его содержимое (например, карты Google) для графического объекта. Как бы это было возможно нарисовать результат непосредственно на LWUIT элементов (на данный момент я пытаюсь нарисовать его на компоненте).

Это единственный способ, чтобы написать оболочку в пакете LWUIT, что подвергнет внутреннюю реализацию этого?

Редактировать:

Джон: ваше решение выглядит много инженерных: P Точто я закончил с использованием в следующем обертка:

package com.sun.lwuit;

public class ImageWrapper {
  private final Image image;

  public ImageWrapper(final Image lwuitBuffer) {
    this.image = lwuitBuffer;
  }

  public javax.microedition.lcdui.Graphics getGraphics() {
    return image.getGraphics().getGraphics();
  }
}

Теперь я могу получить «родной» Графический элемент из LWUIT. Краска на нем - эффективно живописи на LWUIT изображения. И я могу использовать изображение, чтобы рисовать на компоненте.

И она по-прежнему выглядит как взломать :)

Но реальная проблема заключается в 50kB из кода накладных расходов, даже после обфускации. Но это вопрос для другой должности :)

/ JaanusSiim

Задан 22/08/2008 в 21:17
источник пользователем
На других языках...                            


2 ответов

голоса
2

Я не думаю, что хакерство необходимо. Вы можете создать подкласс класса LWTUI компонентов, а затем вы можете боли, что вы хотите на графический контекст компонента. Вы не получите собственный объект lcdui.Graphics, но объект с тем же интерфейсом, который прост в использовании.

Если вам действительно нужно пройти lcdui.Graphics до некоторой базовой библиотеки, чтобы отобразить его выход, то я хотел бы предложить следующее:

Где-то в коде компонента (сделать только тогда, когда содержание компонента действительно необходимо изменить):

private Image buffer = null; // keep this

int[] bufferArray = new int[desiredWidth * desiredHeight];
javax.microedition.lcdui.Image bufferImage = 
    Image.createEmptyImage(desiredWidth, desiredHeight);
thirPartyComponent.paint(bufferImage.getGraphics());
bufferImage.getRGB(bufferArray,0,1,0,0,desiredWidth, desiredHeight);
bufferImage = null; //no longer needed
buffer = Image.createImage(bufferArray, desiredWidth, desiredHeight);

В способе компонент краски (г):

g.drawImage(0,0, buffer);

Делая хак вы сделали вы теряете portablity, а также конюх вы подвергаете внедрение частного объекта вы можете также сломать другие вещи.

Надеюсь это поможет.

Ответил 17/09/2008 в 19:45
источник пользователем

голоса
0

На основании Javadoc для LWUIT и J2ME и догадываясь , что пользовательский класс J2ME является Холст , похоже , вам придется:

  • Подкласс класса LWUIT в компонент оберточной компонент пользовательского J2ME
  • Переопределение методы краски () из компонента LWUIT
  • Подклассы J2ME графика учащейся Оберточный класса LWUIT Graphics и передавать все вызовы методов через
  • Перейдите в обернутой реализации J2ME Graphics для метода расписывать пользовательского J2ME компонента

Это третий шаг некрасивый один. Проверьте в списке рассылки LWUIT , чтобы увидеть , если кто имеет купол это раньше. Из опубликованного API , я не вижу другой способ сделать это.

Edit: Хак добавил в вопросе выглядит лучше , чем мой хак для изображения. То , что я может быть лучше для общего случая, но я не знаю ни LWUIT или J2ME достаточно хорошо , чтобы действительно сказать , что.

Ответил 08/09/2008 в 01:52
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more