当前位置: 首页 > 知识库问答 >
问题:

为什么我在Codename One模拟器中得到的behviour与在真正的Android设备上得到的不同?

公良鸿禧
2023-03-14

我试图找出为什么在模拟器(iPhone、Nexus、Nexus5,...skins)和在Android真实设备上使用以下代码会有不同的行为(我的目标是在背景图像上绘制文本,并以背景图像分辨率保存整个文本):

请注意GUI是由设计器完成的。

    protected void beforeMain(Form f) {

    // The drawing label will contain the whole photo montage
    f.setLayout(new LayeredLayout());
    final Label drawing = new Label();
    f.addComponent(drawing);

    String nom = "Hello World";

    // Image mutable dans laquelle on va dessiner (fond blancpar défaut)
    // synthe is an Image
    Image mutableImage = Image.createImage(synthe.getWidth(), synthe.getHeight());
    drawing.getUnselectedStyle().setBgImage(mutableImage);
    drawing.getUnselectedStyle().setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FIT);

    // Draws over the background image and put all together on the mutable image.
    paintSyntheOnBackground(mutableImage.getGraphics(), 
            synthe,
            nom,
            synthe.getWidth(), 
            synthe.getHeight());

    long time = new Date().getTime();
    OutputStream os;
    try {
        os = Storage.getInstance().createOutputStream("screenshot_" + Long.toString(time) + ".png");
        ImageIO.getImageIO().save(mutableImage, os, ImageIO.FORMAT_PNG, 1.0f);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

} // end of beforeMain

下面是我调用的在图像上绘制文本的方法

public void paintSyntheOnBackground(Graphics g, 
        Image synthe,
        final String pNom,
        int width, int height) {

     Font myFont = g.getFont();
        g.setFont(myFont);
        int w = myFont.stringWidth(pNom);
        int h = myFont.getHeight();

        // Added just to see the background
        g.setColor(0x0000FF);
        g.fillRect(0, 0, width, height);

        g.setColor(0xff0000);
        int x = g.getTranslateX() + width / 2 - w / 2;
        int y = g.getTranslateY() + height / 2 - h / 2;

        g.drawRect(x, y, w, h);
        g.drawString(pNom, x, y);

} // end of paintSyntheOnBackground

任何帮助都将不胜感激!

干杯,

共有1个答案

长孙嘉容
2023-03-14

这是一个非常烦人的bug,我们现在刚刚修复了它,这样它就可以在今天的发行版上发布了。

只有在模拟器处于缩放模式的情况下绘制可变图像时才会出现这个问题,这两种情况我们都不经常这样做,因为缩放模式不太准确,而可变图像通常比较慢。

谢谢你跟上这个。

 类似资料:
  • 问题内容: 当我使用编译类时,收到此错误消息? 包不存在 我可以通过将其包含在编译类路径中来进行修复。 为什么不在默认的jdk类路径上? 是在类路径上,并包括其他软件包,但jce似乎很特殊? 问题答案: 好的,这是我的错误。我用来编译代码的Ant文件在任务中具有以下属性: h 您可以像这样添加JCE jar:

  • 我有一个arraylist,其中添加了以下数字。 然后我使用下面的代码遍历列表并在打印前求和。 它正在打印出一个值6。有人知道发生了什么吗?或者有人能解释我在这里做错了什么吗?感谢您的时间,如果有什么我可以补充澄清的,请不要犹豫。

  • 你好,我刚刚在codenameone中开发了一个应用程序,它在模拟器中工作得非常好,但是当我在物理设备上安装相同的应用程序时,所有绘制的对象的大小都减少了。我想保持与模拟器中相同的大小。模拟器使用的皮肤是:appleipadamini物理设备使用的是:Apple iPadmini4模拟器选择的高度和宽度是1000×700,但是安装在物理设备上时,它只是屏幕的一半。

  • 我的应用程序将其私有数据存储在mnt/sdcard/Android/data/com中。实例myapp文件夹。我看到很多其他应用都有自己的文件夹,这是一个建议的位置。我正在运行4.0.3Android版本的7英寸平板电脑上测试我的应用程序,它可以工作;它是根据Api级别12(Android3.1)编译的。它发出一个带有完整路径的mkdir命令(Environment.getExternalStor

  • 问题内容: 这是我现在正在使用我的Android应用程序处理的问题。程序在模拟器上运行正常,没有任何错误,但在运行相同操作系统的真实设备上却出现了错误。 我有一个应用程序小部件更新服务,可以更新我的小部件。此服务检查窗口小部件是否在屏幕上,否则不进行更新过程。在模拟器上工作正常。 每次必须在OnReceive方法中更新窗口小部件时,我都会在字符串变量check_intent中捕获该意图,该变量告诉

  • 测试代码为: 测试代码为: 你知道怎么了吗?