gpt4 book ai didi

java - 在 LWUIT 组件上绘制 javax.microedition.lcdui.Graphics

转载 作者:行者123 更新时间:2023-12-02 08:38:52 26 4
gpt4 key购买 nike

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

自定义元素是映射库的实现,它将其内容(例如 Google map )绘制到 Graphics 对象。如何将结果直接绘制在 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 获取“ native ”图形元素。在其上绘画 - 有效地在 LWUIT 图像上绘画。我可以使用该图像在组件上绘画。

它看起来仍然像一个黑客:)

但真正的问题是 50kB 的代码开销,即使在混淆之后也是如此。但这是另一篇文章的问题:)

/JaanusSiim

最佳答案

我认为没有必要进行任何黑客攻击。您可以对 LWTUI Component 类进行子类化,然后您可以将任何您想要的内容添加到组件的图形上下文中。您获得的不是 native lcdui.Graphics 对象,而是具有相同接口(interface)且易于使用的对象。

如果您确实需要将 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);

通过进行黑客攻击,您会失去可移植性,而且由于您公开了实现私有(private)对象,因此您可能还会破坏其他东西。

希望这有帮助。

关于java - 在 LWUIT 组件上绘制 javax.microedition.lcdui.Graphics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com