2016-04-06 7 views
2

Ich habe eine benutzerdefinierte Schicht, nach diesem Material: http://docs.gluonhq.com/charm/2.1.1/#_creating_a_layer, und es zu meiner Anwendung:Ist es möglich, Übergänge auf glitzernden Ebenen zu verwenden?

MobileApplication.getInstance().addLayerFactory(LAYER_NAME,() -> customLayer); 

Nun würde Ich mag einen Übergang zu dieser Schicht hinzuzufügen. Sie können Übergänge auf View wie verwenden: view.setShowTransitionFactory(BounceInDownTransition:new)

Layer bietet keine Methode wie diese. Also habe ich versucht, diesen Ansatz einen Übergang zu gelten:

private void showLayer() { 
    MobileApplication.getInstance().showLayer(LAYER_NAME); 
    new BounceInDownTransition(customLayer).play(); 
} 

Als ich showLayer() zum ersten Mal rufe der Übergang unvollständig zu sein scheint. Der erste Teil, in dem der Layer nicht mehr sichtbar ist, fehlt. Jeder weitere Aufruf von showLayer() zeigt den vollständigen Übergang.

Sind Schichten in Verbindung mit Übergängen überhaupt zu verwenden? Wenn möglich was ist der empfohlene Weg?

+0

Die [Release] (http://gluonhq.com/gluon-mobile-2-2-0-released/) des neuen Charm 2.2.0 Version enthält bereits Layer-Übergänge –

Antwort

2

Sie können die integrierten Übergänge in Gluon Charm verwenden, da Sie nur einen Knoten an sie übergeben müssen und play aufrufen müssen, um die Animation zu starten.

Im Fall der Gluon-Ebenen gibt es keinen integrierten Mechanismus wie für Ansichten, aber Sie können ihn einfach zu Ihrer Klasse hinzufügen.

Dies erzeugt einen Bounce-In-Effekt für das Anzeigen und einen Bounce-Out-Effekt für das Ausblenden.

public class MyLayer extends Layer { 

    private final Node root; 
    private final double size = 150; 

    public MyLayer() { 
     final BounceInDownTransition transitionIn = new BounceInDownTransition(this, true); 
     final BounceOutDownTransition transitionOut = new BounceOutDownTransition(this, true); 
     transitionOut.setOnFinished(e -> hide()); 

     Button button = new Button("", MaterialDesignIcon.CLOSE.graphic()); 
     button.setOnAction(e -> transitionOut.playFromStart()); 
     root = new StackPane(button); 
     root.setStyle("-fx-background-color: white;"); 
     getChildren().add(root); 

     getGlassPane().getLayers().add(this); 

     showingProperty().addListener((obs, ov, nv) -> { 
      if (nv) { 
       layoutChildren(); 
       setOpacity(0); 
       transitionIn.playFromStart(); 
      } 
     }); 
    } 

    @Override 
    public void show() { 
     getGlassPane().setBackgroundFade(GlassPane.DEFAULT_BACKGROUND_FADE_LEVEL); 
     super.show(); 
    } 

    @Override 
    public void hide() { 
     getGlassPane().setBackgroundFade(0.0); 
     super.hide(); 
    } 

    @Override 
    public void layoutChildren() { 
     root.setVisible(isShowing()); 
     if (!isShowing()) { 
      return; 
     } 
     root.resize(size, size); 
     resizeRelocate((getGlassPane().getWidth() - size)/2, (getGlassPane().getHeight()- size)/2, size, size); 
    } 
} 

Und jetzt, fügen Sie die Ebene:

@Override 
public void init() { 
    addViewFactory(BASIC_VIEW,() -> new BasicView(BASIC_VIEW)); 

    addLayerFactory("My Layer",() -> new MyLayer()); 
} 
+0

Immer noch den gleichen Effekt. Erste Frames des Übergangs fehlen ... – jns

+0

Ja, das habe ich auch bemerkt. Ich habe meine Antwort mit einem Fix bearbeitet: Rufen Sie 'layoutChildren()' auf, bevor Sie die Animation starten. Jedenfalls erstelle ich ein internes Problem dafür. –

+0

Dieses Problem sollte mit der [release] (http://gluonhq.com/gluon-mobile-2-2-0-released/) der neuen Charm 2.2.0 Version behoben werden. Kannst du überprüfen? –

Verwandte Themen