如何扩大并设置MediaView的坐标?(How to scale and set coordina

2019-09-16 13:12发布

我想使嵌入的视频在我的了JavaFx 2.x的场景,也调整其大小,并将其迁移到我的需要。 我遇到的问题是以下。 如果我建一个MediaView组件,然后平移坐标X或Y,那么整个观点得到了适当移动就像这样:

MediaView mv = (...)
mv.setTranslateX(200);
mv.setTranslateY(200);

我可以做缩放特性进行类似的转变:

MediaView mv = (...)
mv.setScaleX(2);
mv.setScaleY(2);

这将正确缩放 mv例如两倍的尺寸。

然而,问题是,当我结合这两个翻译。 该mv实例被缩放,但它总是在屏幕坐标中结束了(0,0) 这是从我的角度当然不正确的行为。

我也试图总结我的MediaView一些包装节点内的器件,如Group和这个元素上执行的翻译。 该行为是相同的。

我怎样才能正确地移动和缩放MediaView在同一时间组成部分?

编辑:

这里是我的代码,虽然我在这里使用ImageView 。 这是无关紧要的,但是。 运行该代码后,图像将被放置在(0,0)而不是(100,100)

    @Override
    public void start(Stage stage) throws Exception {
        Group root = new Group();

        // Img's dimension is 200x200
        javafx.scene.image.Image img = new javafx.scene.image.Image("/home/bachman/projects/cs-player/src/main/resources/content.png");
        ImageView iv = new ImageView(img);
        root.getChildren().add(iv);

        // Move Image View
        iv.setTranslateX(100);
        iv.setTranslateY(100);

        // Scale Image View
        iv.setScaleX(2.0);
        iv.setScaleY(2.0);

        Scene scene = new Scene(root);
        stage.setWidth(600);
        stage.setHeight(600);
        stage.setScene(scene);
        stage.show();
    }

Answer 1:

当您使用setScaleX,setScaleY,缩放比例从节点的中心出现。

如果你想通过量除了缩放翻译,你需要采取比例扩大到当您设置所需的转换值。 例如,如果节点尺寸双打(和你想的节点转换为相对于未缩放节点的左上角的位置),你需要通过额外的半节点的宽度和高度来翻译。

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.media.*;
import javafx.scene.transform.*;
import javafx.stage.Stage;

public class TransformedVideo extends Application {
  public static void main(String[] args) throws Exception { launch(args); }
  @Override public void start(final Stage stage) throws Exception {
    final MediaPlayer oracleVid = new MediaPlayer(new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv"));
    final MediaView mediaView = new MediaView(oracleVid);
    mediaView.setFitWidth(320); mediaView.setFitHeight(240); mediaView.setPreserveRatio(false);

    mediaView.setTranslateX(mediaView.getFitWidth()  / 2 + 200); 
    mediaView.setTranslateY(mediaView.getFitHeight() / 2 + 200);
    mediaView.setScaleX(2); mediaView.setScaleY(2);

// alternative method of scaling and translating.    
//    mediaView.getTransforms().addAll(
//      new Translate(200, 200),
//      new Scale(2, 2)
//    );

    Group group = new Group(mediaView);
    stage.setScene(new Scene(group, 1250, 800));
    stage.show();

    oracleVid.play();

    System.out.println(group.getBoundsInParent());
  }
}

当一个节点上执行多个转换,而不是使用setScale /的setTransform / setRotate方法,它往往容易只是提供变换的一列表至该getTransforms()方法。



文章来源: How to scale and set coordinates of MediaView?
标签: java javafx-2