2016-06-23 7 views
2

Я пытаюсь выяснить, почему у меня другое поведение в симуляторе (iPhone, Nexus, Nexus5, ... skins) VS на реальном устройстве Android с помощью следующего кода (моя цель - нарисовать текст на фоне изображение и сохранить целое в разрешении фонового изображения):Почему у меня другое поведение в Codename Один симулятор, чем на реальном Android-устройстве?

Обратите внимание, что графический интерфейс был выполнен с помощью конструктора.

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 

Вот результат на тренажере (GoogleNexus7): outcome on the simulator (GoogleNexus7)

И вот результат на устройстве (Android 4.4): outcome on the device (Android 4.4)

Мое развитие система Eclipse на Linux с Codename One V3-4.

Я знаю, что симулятор не может воспроизвести конкретный случай, но здесь нет ничего особенного, не так ли? Что я могу сделать, чтобы поведение на симуляторе отражало реальное поведение, поскольку было бы гораздо легче тестировать в симуляторе?

EDIT: После обновления каждой из моих проектов проекта CN1 от версии 114 до 115 (см. this question for details on how to do the upgrade), теперь я могу получить такое же поведение и в симуляторе, и в устройстве! Отличная работа по исправлению ошибок в команде CN1! Обратите внимание: в моем случае (Eclipse - Linux) мне пришлось обновить файлы проекта в каждый Проект Codename One.

Любая помощь была бы принята с благодарностью!

Приветствия,

ответ

1

Это было действительно раздражает ошибка, что мы just fixed now так что он может сделать это в сегодняшнем выпуске.

Проблема возникает только при использовании изменяемого изображения в случае, когда симулятор находится в режиме масштабирования, оба из которых мы часто не делаем, поскольку режим масштабирования менее точен, а изменяемые изображения обычно медленнее.

Спасибо, что не отставали.

+0

Вы действительно качаете Codename One Team! Вы не можете понять, как проще сделать мою жизнь с исправленной ошибкой! Я обновился до версии 115, и теперь он работает так, как ожидалось. Большое спасибо @Shai! – HelloWorld

+0

Спасибо за продолжение этой проблемы ;-) –

+0

Спасибо за исправление. У меня была такая же проблема. Я просто решил игнорировать его, потому что он работал нормально на самом устройстве, но, безусловно, полезно, что это исправлено. – MiguelMunoz