在LWUIT元素上绘制自定义元素(使用J2ME本机图形)的最佳方法是什么?

custom元素是来自映射库的实现,将其内容(例如Google map)绘制到Graphics对象。 如何将结果直接绘制在LWUIT元素上(目前,我正在尝试将其绘制在Component上)。

在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获取'native'Graphics元素。 在其上绘画-有效地在LWUIT图像上绘画。 而且我可以使用图像在组件上绘画。

而且它仍然看起来像一个hack :)

但是真正的问题是即使混淆后代码开销也高达50kB。 但这是另一个帖子的问题:)

/ JaanusSiim

===============>>#1 票数:2

我认为没有必要进行任何黑客攻击。 您可以继承LWTUI Component类的子类,然后可以对组件的图形上下文进行任何操作。 您不会获得本机的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);

在组件paint(g)方法中:

g.drawImage(0,0, buffer);

通过执行hack,您失去了可移植性,并且还暗示您要暴露实现私有对象,因此您可能还会破坏其他东西。

希望这可以帮助。

===============>>#2 票数:0

基于LWUIT和J2ME的javadoc,并猜测自定义J2ME类是Canvas ,看起来您将必须:

  • 包裹自定义J2ME组件的LWUIT的Component类的
  • 重写LWUIT组件的paint()方法
  • 类化包装LWUIT Graphics类的J2ME Graphics类 ,并将所有方法调用传递给
  • 将包装的J2ME Graphics实现传递给自定义J2ME组件的paint方法

第三步很丑。 检查LWUIT邮件列表 ,看看以前是否有人有圆顶。 从已发布的API中,我看不到另一种方法。

编辑:在问题中添加的hack看起来比我对Image的hack更好。 对于一般情况,我所拥有的可能会更好,但是我对LWUIT或J2ME的了解还不够,无法真正说出这一点。

  ask by JaanusSiim translate from so

未解决问题?本站智能推荐: