如何缩放和设置MediaView的坐标?

2023-12-02

我想在我的 JavaFx 2x 场景中嵌入一个视频,并根据我的需要调整它的大小和位置。我遇到的问题如下。如果我建立一个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同时组成部分?

Edit:

这是我的代码,尽管我在这里使用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();
    }

当您使用 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() 方法提供变换列表通常更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何缩放和设置MediaView的坐标? 的相关文章

随机推荐

  • 在R中的时间间隔后中断readline()

    如何在经过一定时间后中断循环 我有一个从用户收集观察数据的功能 记录数据时 用户应该有一个预定义的时间限制 示例中为 30 秒 目前 如果用户输入晚于时间限制结束 该功能就会中断 record events lt function dura
  • 将 CUDA 添加到 ROS 包

    我想在 ros 包中使用 cuda 有人给我一个简单的例子吗 我尝试使用 cuda 函数构建一个静态库并将该库添加到我的包中 但总是出现链接错误 未定义的引用 cuda 我已经构建了一个可执行文件而不是库并且它可以工作 请帮忙 我自己找到了
  • 使用数组分隔符连接数组序列(“散布”)

    是否有一个函数可以让我连接多个数组 它们之间有分隔符 分隔符也是数组 类似于join有效但不限于字符串 该函数可以是标准 JS 或主要库的一部分 例如lodash 这就是标签中引用它的原因 这是一个用法示例 let numbers 1 2
  • 未捕获的类型错误:对象 [object Object] 没有方法“on”

    我创建了一个函数appendScript 它将在按钮单击事件上调用 我的函数代码是 function appendScript var v js var head document getElementsByTagName head 0 v
  • 设置UDP套接字的recv fcn超时

    我通过以下方式发送 UDP 数据包sendto 然后通过以下方式收到答案recv if recv没有收到回复 程序不会继续进行 但是 udp数据包可能会丢失 或者由于某种原因无法发送数据包 从而导致程序卡在recv线 我想知道如何设置超时r
  • Google 托管库不必要地使用缓存断路器

    我在仪表板上使用以下代码来不断刷新它而不会闪烁如何使用 jQuery 刷新页面 然而 由于一些缓存破坏器 这也会导致 javascript 每次重新加载
  • JavaScript 中的日期到时间戳

    javascript 是否可以将某些日期转换为时间戳 我有这种格式的日期2010 03 09 12 21 00我想用 javascript 将其转换为等效的时间戳 回应您的编辑 你需要解析日期字符串建立一个Date对象 然后就可以获取时间戳
  • create-react-app 中缩小的组件堆栈跟踪(开发模式)

    Running create react app in 发展 mode 为什么我的控制台错误链接到缩小的代码块 我想我记得 CRA 能够显示源映射文件 这是因为该错误是由您使用的依赖项之一引发的 当你安装一个包时 你会在你的node mod
  • 使用外部缓冲区存储字符串而不进行复制

    假设我有一个函数可以得到const string 作为其输入 例如 void foo const string s 然后我有一个内部缓冲区const char buffer 我知道它的大小 我认为如果我内联创建字符串 仍然会发生一份副本 f
  • 以编程方式查找 Chrome 浏览器历史记录

    我正在制作一个小型 Java 应用程序来显示用户最常访问 Chrome 中的哪些 URL 如何在 Java 中访问我的浏览器历史记录 创建一个ContentObserver班级 static class ChromeOberver exte
  • Python:循环读取所有文本文件行

    我想逐行读取巨大的文本文件 如果找到带有 str 的行则停止 如何检查是否到达文件末尾 fn t log f open fn r while not is eof f how to check that end is reached s f
  • 从表示图像的数组中提取环/扇形区域

    我正在尝试从 MATLAB 中图像的数组表示形式中提取特征 这些特征具有圆形 环 和扇形的形状 如下图所示 我花了相当多的时间寻找一个可以做到这一点的内置函数 我已经设法使用一个丑陋的循环来进行环提取 但不知道从哪里开始扇区部分 任何关于如
  • 如何为 Firefox、IE 和 Chrome 创建插件/附加组件

    我需要为 IE firefox 和 chrome 浏览器创建插件 附加组件 以满足以下要求 如果请求的网址采用特定格式 匹配特定正则表达式模式 则插件必须阻止该请求并弹出警报框 我进行了很多搜索 但没有找到任何有用的东西 对于IE 我认为我
  • 发布表单时如何获取复选框元素中未选中复选框的值?

    我有一个如下所示的表格
  • 使用 android.support.v7.app.ActionBar 的选项卡

    我最近更新了我的 Android 应用程序 以在 Android 2 3 上使用对操作栏和操作栏选项卡的 v7 支持 更新代码后 我在 4 2 设备和模拟 2 3 设备上运行该应用程序 操作栏和选项卡在真实硬件上显示良好 但在模拟设备上则不
  • NanoMsg (NNG) 和 FlatBuffers 是否适合该项目?

    大声喊出我们是否应该考虑更好的事情 我正在寻找一种非常快速且简单的方法来获取多个程序 例如 5 个 每个程序都在私有 OpenStack 云上的单独节点上运行以相互通信 数据包将是短 C 结构 小于 100 字节 交通流量将会较少 可能低于
  • 控制 JsonResult 中的序列化程序,又名 ASP.Net MVC 中的 Json 函数?

    有没有办法配置在控制器中通过 JsonResult 返回 JSON 时使用什么 JSON 序列化器 public ActionResult SomeJsonFunction var x SomeModelCode SomeModelFunc
  • 如何从 Firebase 检索 ListView 中的数据

    你能帮我解决这个问题吗 我尝试在 Listview 中显示 firebase 中的数据 但不显示任何内容 ListView listView FirebaseDatabase firebaseDatabase DatabaseReferen
  • 删除向量每个元素中第二次出现“-”之后的所有字符

    我想删除向量的每个元素中第二次出现 之后的所有字符 Initial string aa bbb cccc gt aa bbb aa vvv vv gt aa vvv aa ddd gt aa ddd 有什么帮助吗 根据示例输入和预期输出判断
  • 如何缩放和设置MediaView的坐标?

    我想在我的 JavaFx 2x 场景中嵌入一个视频 并根据我的需要调整它的大小和位置 我遇到的问题如下 如果我建立一个MediaView组件然后平移X或Y坐标 然后整个视图就被正确移动像这样 MediaView mv mv setTrans