2016-06-23 7 views
2

Ich versuche herauszufinden, warum ich ein anderes Verhalten im Simulator (iPhone, Nexus, Nexus5, Skins) VS auf einem Android-Real-Gerät mit dem folgenden Code (mein Ziel ist es, einen Text über einen Hintergrund zu zeichnen) bekommen Bild und speichern Sie das ganze in Hintergrundbildauflösung):Warum bekomme ich im Codename One-Simulator ein anderes Verhalten als auf einem echten Android-Gerät?

Bitte beachten Sie, dass die GUI mit dem Designer gemacht wurde.

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 

Und hier ist die Methode, die ich

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 

hier einen Text über ein Bild zu zeichnen rufen wird das Ergebnis auf dem Simulator (GoogleNexus7): outcome on the simulator (GoogleNexus7)

Und hier ist die Ergebnis auf dem Gerät (Android 4.4): outcome on the device (Android 4.4)

Meine Entwicklung Das System bietet Eclipse unter Linux mit Codename One V3-4.

Ich weiß, dass der Simulator spezifischen Fall nicht reproduzieren kann, aber hier gibt es nichts besonderes, nicht wahr? Was kann ich tun, damit das Verhalten am Simulator das tatsächliche Verhalten widerspiegelt, da es im Simulator viel praktischer wäre, es zu testen?

EDIT: Nach dem Upgrade jeder meiner CN1-Projekt-Bibliotheken von Version 114 auf 115 (siehe this question for details on how to do the upgrade), bin ich jetzt in der Lage, das gleiche Verhalten im Simulator und Gerät zu bekommen! Tolles Bugfixing Job CN1 Team! Bitte beachten Sie: In meinem Fall (Eclipse - Linux) musste ich die Projekt-Bibliotheken in jedem Codename One-Projekt aktualisieren.

Jede Hilfe würde sehr geschätzt werden!

Cheers,

Antwort

1

Das war ein wirklich ärgerlicher Fehler, die wir just fixed now so es sie zum heutigen Release machen.

Das Problem tritt nur auf, wenn ein veränderbares Bild gezeichnet wird, wenn der Simulator im Maßstabsmodus ist, was wir beide nicht oft tun, da der Maßstabsmodus weniger genau ist und veränderliche Bilder im Allgemeinen langsamer sind.

Danke, dass Sie dabei bleiben.

+0

Sie rocken wirklich Codename One Team! Sie können sich nicht vorstellen, wie einfacher Sie mein Leben mit diesem Fehler beheben können! Ich habe auf Version 115 aktualisiert und es funktioniert jetzt wie erwartet. Vielen Dank @Shai! – HelloWorld

+0

Vielen Dank, dass Sie sich mit diesem Thema beschäftigt haben ;-) –

+0

Danke für die Lösung. Ich hatte das gleiche Problem. Ich habe es nur ignoriert, weil es auf einem tatsächlichen Gerät gut funktioniert hat, aber es ist sicherlich hilfreich, dass dies behoben ist. – MiguelMunoz

Verwandte Themen