private Animation createOpenTransition() {
	final ParallelTransition openTransition = new ParallelTransition();
	final Animation centerTransition = new Timeline(new KeyFrame(
		Duration.ZERO, new KeyValue(center.radiusProperty(),
			centerClosedRadius), new KeyValue(
			fakeBackground.radiusProperty(),
			fakeBackground.getRadius())), new KeyFrame(
		Duration.millis(animDuration), new KeyValue(
			center.radiusProperty(), centerOpenedRadius),
		new KeyValue(fakeBackground.radiusProperty(), itemRadius + 4)));
	openTransition.getChildren().add(centerTransition);

	// Text font transition
	final DoubleProperty animValue = new SimpleDoubleProperty();
	final ChangeListener<? super Number> listener = new ChangeListener<Number>() {

	    @Override
	    public void changed(
		    final ObservableValue<? extends Number> obsValue,
		    final Number previousValue, final Number newValue) {
		final Font f = getTextFont(newValue.doubleValue());

		centerText.setFont(f);

	    }

	    Font[] fonts = new Font[] {
		    Font.font(java.awt.Font.SANS_SERIF, FontWeight.BOLD, 12),
		    Font.font(java.awt.Font.SANS_SERIF, FontWeight.BOLD, 13),
		    Font.font(java.awt.Font.SANS_SERIF, FontWeight.BOLD, 14),
		    Font.font(java.awt.Font.SANS_SERIF, FontWeight.BOLD, 15),
		    Font.font(java.awt.Font.SANS_SERIF, FontWeight.BOLD, 16) };

	    private Font getTextFont(final double newValue) {
		final int fontArrayIndex;
		if (newValue < 0.2) {
		    fontArrayIndex = 0;
		} else if (newValue < 0.4) {
		    fontArrayIndex = 1;
		} else if (newValue < 0.6) {
		    fontArrayIndex = 2;
		} else if (newValue < 0.8) {
		    fontArrayIndex = 3;
		} else {
		    fontArrayIndex = 4;
		}
		return fonts[fontArrayIndex];
	    }
	};
	animValue.addListener(listener);

	final Animation menuTextTransition = new Timeline(new KeyFrame(
		Duration.ZERO, new KeyValue(animValue, 0)), new KeyFrame(
		Duration.millis(animDuration), new KeyValue(animValue, 1.0)));

	openTransition.getChildren().add(menuTextTransition);

	final List<KeyValue> keyValueZero = new ArrayList<KeyValue>();
	final List<KeyValue> keyValueFinal = new ArrayList<KeyValue>();

	for (final RadialMenuItem item : items) {
	    keyValueZero.add(new KeyValue(item.innerRadiusProperty(),
		    centerClosedRadius));
	    keyValueZero.add(new KeyValue(item.radiusProperty(),
		    centerClosedRadius));

	    keyValueFinal.add(new KeyValue(item.innerRadiusProperty(),
		    itemInnerRadius));
	    keyValueFinal.add(new KeyValue(item.radiusProperty(), itemRadius));

	    final Animation textTransition = getTextOpenTransition(item);
	    openTransition.getChildren().add(textTransition);
	}

	keyValueZero.add(new KeyValue(radiusStroke.radiusProperty(),
		centerClosedRadius));
	keyValueZero.add(new KeyValue(innerRadiusStroke.radiusProperty(),
		centerClosedRadius));

	keyValueFinal.add(new KeyValue(radiusStroke.radiusProperty(),
		itemInnerRadius));
	keyValueFinal.add(new KeyValue(innerRadiusStroke.radiusProperty(),
		itemRadius));

	final Animation radiusTransition = new Timeline(new KeyFrame(
		Duration.ZERO, keyValueZero.toArray(new KeyValue[0])),
		new KeyFrame(Duration.millis(animDuration), keyValueFinal
			.toArray(new KeyValue[0])));

	openTransition.getChildren().add(radiusTransition);

	return openTransition;
    }