Я пытаюсь выяснить, почему у меня другое поведение в симуляторе (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):
И вот результат на устройстве (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.
Любая помощь была бы принята с благодарностью!
Приветствия,
Вы действительно качаете Codename One Team! Вы не можете понять, как проще сделать мою жизнь с исправленной ошибкой! Я обновился до версии 115, и теперь он работает так, как ожидалось. Большое спасибо @Shai! – HelloWorld
Спасибо за продолжение этой проблемы ;-) –
Спасибо за исправление. У меня была такая же проблема. Я просто решил игнорировать его, потому что он работал нормально на самом устройстве, но, безусловно, полезно, что это исправлено. – MiguelMunoz