
[英]Is there something like “Anchors” (javax.microedition.lcdui.Graphics) in java.awt.Graphics?
[英]Painting javax.microedition.lcdui.Graphics on LWUIT Component
在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
我认为没有必要进行任何黑客攻击。 您可以继承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,您失去了可移植性,并且还暗示您要暴露实现私有对象,因此您可能还会破坏其他东西。
希望这可以帮助。
基于LWUIT和J2ME的javadoc,并猜测自定义J2ME类是Canvas ,看起来您将必须:
第三步很丑。 检查LWUIT邮件列表 ,看看以前是否有人有圆顶。 从已发布的API中,我看不到另一种方法。
编辑:在问题中添加的hack看起来比我对Image的hack更好。 对于一般情况,我所拥有的可能会更好,但是我对LWUIT或J2ME的了解还不够,无法真正说出这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.