如何在Codename One的路径上正确编写文本

时间:2014-08-25 09:59:26

标签: java codenameone

我想用Codename One在路径上写文本,文本是街道名称,在地图中更多。 整个项目真的很大,无法附加。 我写了另一个例子来说明我的问题。 我在图形上绘制一个矩形,然后在其中绘制文本,在绘制之前我旋转图形。 但是当你给旋转整个文本和矩形有一点大的θ时,距离(文本不是以矩形绘制)。 这是什么问题?

代码:

public class MyApplication {

    private Form current;
    Form frm;

    public void init(Object context) {
        // Pro users - uncomment this code to get crash reports sent to you automatically
        /*Display.getInstance().addEdtErrorHandler(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                evt.consume();
                Log.p("Exception in AppName version " + Display.getInstance().getProperty("AppVersion", "Unknown"));
                Log.p("OS " + Display.getInstance().getPlatformName());
                Log.p("Error " + evt.getSource());
                Log.p("Current Form " + Display.getInstance().getCurrent().getName());
                Log.e((Throwable)evt.getSource());
                Log.sendLog();
            }
        });*/
    }

    public void start() {
        if(current != null){
            current.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
            current.show();
            return;
        }
        new StateMachine("/theme");
        createDraw();

    }

    public void stop() {
        current = Display.getInstance().getCurrent();
    }

    public void destroy() {
    }

    private void createDraw() {
        frm = new Form("Rect");
        frm.setLayout(new LayeredLayout());
        frm.setUIID("Form");
        Container cont = new Container(new FlowLayout(Component.RIGHT));
        cont.setUIID("Container");
        Label lbl = new Label();
        lbl.setPreferredSize(new Dimension(1280, 720));
        lbl.setUIID("Label");
        cont.setPreferredSize(new Dimension(1280, 720));
        cont.setShouldCalcPreferredSize(true);
        Image img = Image.createImage(1280, 720);
        Image img2 = Image.createImage(1280, 720);
        Graphics g = img.getGraphics();
        g.setColor(0xff0000);


        Font font =  Font.createSystemFont( Font.FACE_MONOSPACE, Font.SIZE_MEDIUM, Font.SIZE_LARGE);
        g.setFont(font);

        Transform transform = g.getTransform();
        g.rotate(1.5f, 100, 100);
        g.drawRect(100, 100, 200, 22);
        g.drawLine(100, 111, 300, 111);
        g.setColor(0x111111);
        g.drawString("HHHHHHHHHHHHHHHHHH", 100, 100);
        g.setTransform(transform);

        img2.getGraphics().drawImage(img, 0, 0);
        lbl.setIcon(img2);
        frm.addComponent(lbl);

        frm.show();
    }
}

如果以1.5

旋转
g.rotate(1.5f, 100, 100);

enter image description here

如果使用.3

旋转
g.rotate(.3f, 100, 100);

enter image description here

提前致谢。

1 个答案:

答案 0 :(得分:1)

查看您的代码我认为您的计算错误,例如只需在iPhone3gs皮肤上的模拟器中进行检查,这几乎可以正常工作:

iPhone 3gs image

然后在iPad皮肤上看起来像这样:

iPad simulator

这两个使用完全相同的底层Codename One代码。

您似乎使用了两个可变图像而不是覆盖油漆或使用不是好政策的画家。