2016-03-23 20 views
2

Ich erstelle einen Begrüßungsbildschirm. Bis jetzt kann ich entweder einen Einwachseffekt oder einen Einblendeffekt erzielen. Es funktioniert nicht, während versucht wird, beide Animationen gleichzeitig zu erhalten.ein Bild animieren (dh gleichzeitig ein- und ausblenden)

//zooms or grows the image 
findImageViewerSplash(f).growShrink(1000); 
//for fade in effect 
findContainerImageViewer(f).animateLayoutFadeAndWait(2000, 0); 

Verwendet einen Bildbetrachter, um den Wachstumseffekt zu erhalten. Hier befindet sich die Bildbetrachterkomponente in ContainerImageViewer. Wenn ich eine der Zeilen auskommentiere, funktioniert es, aber die Implementierung funktioniert nicht. Danke

Ausnahme bei setUIID zu scaleImageLabel.

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.codename1.impl.javase.Executor$1$1.run(Executor.java:100) 
    at com.codename1.ui.Display.processSerialCalls(Display.java:1149) 
    at com.codename1.ui.Display.mainEDTLoop(Display.java:966) 
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 
Caused by: java.lang.NullPointerException 
    at com.codename1.components.ScaleImageLabel.calcPreferredSize(ScaleImageLabel.java:83) 
    at com.codename1.ui.Component.preferredSizeImpl(Component.java:1930) 
    at com.codename1.ui.Component.preferredSize(Component.java:1965) 
    at com.codename1.ui.Component.setPreferredSize(Component.java:735) 
    at userclasses.StateMachine.beforeSplashScreen(StateMachine.java:178) 
    at generated.StateMachineBase.beforeShow(StateMachineBase.java:883) 
    at com.codename1.ui.util.UIBuilder.showForm(UIBuilder.java:2514) 
    at com.codename1.ui.util.UIBuilder.showForm(UIBuilder.java:2561) 
    at generated.StateMachineBase.startApp(StateMachineBase.java:60) 
    at generated.StateMachineBase.<init>(StateMachineBase.java:31) 
    at generated.StateMachineBase.<init>(StateMachineBase.java:106) 
    at userclasses.StateMachine.<init>(StateMachine.java:78) 
    at com.ruslanVodka_CapitalEye.myapp.RuslanApp.start(RuslanApp.java:23) 
    ... 9 more 

Antwort

0

Diese Effekte sind exklusiv für einander und Sie können sie parallel ausführen.

Sie brauchen nicht tatsächlich die growShrink Anruf als die animateLayout* Anrufe werden basierend auf Ihrer bevorzugten Größe Definition wachsen/verkleinern.

Es folgt ein Beispiel, das eine „wachsen“ -Effekt mit belebter Layout erzeugt:

Form hi = new Form("Grow", new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER)); 
int w = Display.getInstance().getDisplayWidth(); 
ScaleImageLabel dukeLabel = new ScaleImageLabel(duke); 
dukeLabel.setPreferredSize(new Dimension(w/3, w/3)); 
hi.add(BorderLayout.CENTER, dukeLabel); 
hi.addShowListener((e) -> { 
    dukeLabel.setPreferredSize(new Dimension(w, w)); 
    dukeLabel.getParent().animateLayout(5000); 
}); 

hi.show(); 
+0

ich es nicht bekommen, wie kann ich wachsen/schrumpfen animateLayout mit? kannst du mir ein eg geben. –

+0

Animiertes Layout verschiebt die Komponenten auf ihre neue Größe/Position. Wenn Sie also nur die bevorzugte Größe der Komponente festlegen, sollte sie an die neue Größe angepasst werden. Beachten Sie, dass Sie auch animateUnlayout verwenden können, mit dem Sie zu beliebigen Orten/Größen animieren können. –

+0

findImageViewerSplash (f) .setPreferredSize (neue Dimension (screenWidth/3, screenWidth/3)); findContainer (f) .animateLayoutFadeAndWait (2000, 0); findImageViewerSplash (f) .setPreferredSize (neue Dimension (screenWidth, screenWidth)); Es hat sich nichts geändert. Hier befindet sich der Container im Borderlayout. Wenn ich das Layout in Flow-Layout ändere, bewegt sich die imageviewersplash-Komponente von links nach rechts. Aber ich möchte die Größe ändern und nicht die Position –