JavaFX中的旋转ImageView

时间:2018-11-04 16:58:32

标签: javafx rotation imageview

我正在尝试旋转旋转旧的收音机旋钮,而旋转是我的问题。当鼠标光标位于旋钮上时,一切正常,但是,当鼠标离开旋钮区域时,一切工作均不正常。这是我的旋钮代码。
编辑:我只想通过左右移动旋钮即可。上下移动对我不感兴趣。
EDIT2:仅在旋钮区域不会发生此问题。我认为这取决于  光标移动距离。

@FXML
void onFrequencyKnobMouseMove(MouseEvent mouseEvent) {
    double vX = (mouseEvent.getX() - deltaX);
    System.out.println("VX: " + vX);

    double rotation = frequencyKnob.getRotate() + vX;
    if(rotation > 180) rotation=180;
    if(rotation < -180) rotation=-180;
    frequencyKnob.setRotate(rotation);
    System.out.println("ROTATION: " + rotation);

    tuningLine.setLayoutX(rotation*1.33+250);

    deltaX = mouseEvent.getX();
    System.out.println("DELTAX: " + deltaX + "\n\n");
}


@FXML
void onFrequencyKnobMouseDown(MouseEvent mouseEvent) {
    deltaX = mouseEvent.getX();
    //System.out.println(deltaX);
}

FXML文件

<ImageView fx:id="frequencyKnob" layoutX="856.0" layoutY="29.0" onMouseDragged="#onFrequencyKnobMouseMove" onMousePressed="#onFrequencyKnobMouseDown">
    <image>
        <Image url="@knob.png" />
    </image>
</ImageView>

Knob rotating gif

1 个答案:

答案 0 :(得分:2)

您将MouseEvent的处理程序添加到ImageView中。通过此事件对象可用的坐标位于旋转的ImageView的坐标系中。您应该在未修改的坐标系中使用坐标。最简单的方法是使用sceneX属性而不是x的{​​{1}}属性,或者转换为父级的坐标系。

示例

MouseEvent