我有一个ImageView,可以用鼠标拖放,点击按钮旋转90度。这两件事在独立完成时都可以工作(因此可以旋转或移动ImageView,而不是两者都可以)。当我旋转ImageView并尝试移动它时,它似乎是随机移动的。
我使用以下方法旋转图像视图:
imageView.setRotate(90);
这导致了我所说的看似随机的运动。
我还尝试使用以下方法旋转ImageView:
imageView.getTransforms().add(new Rotate(rotation, position + (width / 2), position + (height / 2));
位置是图像在屏幕上的位置。宽度和高度是ImageView的宽度和高度。
这在很大程度上起到了作用(ImageView不再以意外的方式移动),但是现在可以将其移动并放置在其父窗格(javafx.scene.layout.Pane)的边界之外。
ImageView保持在界限内的方式是:
imageView.setOnMouseDragged(new EventHandler<MouseEvent>(){
public void handle(MouseEvent e) {
if(!e.isPrimaryButtonDown()) return;
ImageView iv = (ImageView) e.getSource();
if(e.getX() > iv.getParent().getTranslateX()) iv.setX(e.getX());
if(e.getY() > iv.getParent().getTranslateY()) iv.setY(e.getY());
}
});
此的父级是前面所述的窗格。在旋转ImageView之前,此操作效果良好。
我不知道该从这里走到哪里,所以我非常感谢您的帮助。谢谢
编辑到原始问题:
使用第二种旋转方法:
imageView.getTransforms().add(new Rotate(rotation, position + (width / 2), position + (height / 2));
这种方法的工作原理与x和y的翻译改变我旋转ImageView的事实不同。例如,如果我在旋转90度的图像上向右移动鼠标,那么鼠标拖动事件中e.getX()的位置不会改变,但e.getY()减小。这表明e.getX()和e.getY()的方式取决于ImageView的旋转。
有没有办法在不影响ImageView的x和y坐标的情况下旋转?
值e.getX()
和e.getY()
在图像视图的坐标系中;旋转后,该坐标系仍然是图像视图的局部坐标系。因此,您将图像视图的x坐标设置为旋转后与y坐标有更多关系的东西(以某种非平凡的方式)。
您应该通过计算鼠标相对于固定物体的移动量来计算拖动:例如场景。
以下是一个可用的SSCCE(双击可旋转):
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class ImageTransformTest extends Application {
@Override
public void start(Stage primaryStage) {
ImageView arrow = new ImageView(createImage());
Pane pane = new Pane(arrow);
pane.setMinSize(600, 600);
new Dragger(arrow) ;
arrow.setOnMouseClicked(e -> {
if (e.getClickCount() == 2) {
arrow.setRotate(arrow.getRotate() + 90);
}
});
Scene scene = new Scene(pane) ;
primaryStage.setScene(scene);
primaryStage.show();
}
private static class Dragger {
private double x ;
private double y ;
Dragger(ImageView imageView) {
imageView.setOnMousePressed(e -> {
x = e.getSceneX();
y = e.getSceneY();
});
imageView.setOnMouseDragged(e -> {
double deltaX = e.getSceneX() - x ;
double deltaY = e.getSceneY() - y ;
imageView.setX(imageView.getX() + deltaX);
imageView.setY(imageView.getY() + deltaY);
x = e.getSceneX() ;
y = e.getSceneY() ;
});
}
}
private Image createImage() {
WritableImage image = new WritableImage(100, 100);
for (int y = 0 ; y < 40 ; y++) {
for (int x = 0 ; x < 50 - 50 * y / 40 ; x++) {
image.getPixelWriter().setColor(x, y, Color.TRANSPARENT);
}
for (int x = 50 - 50 * y / 40 ; x < 50 + 50 * y / 40 ; x ++) {
image.getPixelWriter().setColor(x, y, Color.BLUE);
}
for (int x = 50 + 50 * y ; x < 100 ; x++) {
image.getPixelWriter().setColor(x, y, Color.TRANSPARENT);
}
}
for (int y = 40 ; y < 100 ; y++) {
for (int x = 0 ; x < 100 ; x++) {
image.getPixelWriter().setColor(x, y, x < 30 || x > 70 ? Color.TRANSPARENT : Color.BLUE);
}
}
return image ;
}
public static void main(String[] args) {
launch(args);
}
}
在JavaFX中,我试图通过单击并拖动节点来移动它。如果节点不旋转,它工作得很好,但是当我旋转它时,它开始表现得很奇怪。 在45°左右,当我移动它时,它开始抖动,在60°时,它剧烈地来回抖动。在90°时,只要我开始移动节点,它就会飞离屏幕。 下面是我用来旋转和移动节点的代码。它来自连接到节点的鼠标侦听器。 编辑:这是一些示例输出,以及显示不同节点的图片。 未旋转且缓慢向左移动时的输出: 旋转时缓慢
我有一个名为sampleImage的图像,我试图沿着x轴和y轴拉伸它,如下所示,当它处于横向时,它根本不起作用 然后,我在viewDidLayoutSubviews()中做了如下操作, 如果设备在中,这是有效的,但是一旦您将其旋转到并返回,所有更改都将消失。如何确保这些尺寸在旋转时保持不变?
我正在开发一个应用程序,我需要改变旋转器背景布局,以匹配背景颜色。我研究发现,我需要创建一个9补丁图像。我已经完成了创建9补丁图像,并在应用程序中使用,但它看起来比正常的旋转器更大,而且我看不到下拉按钮在旋转器以及。 我很高兴,如果你们提供给我一个清晰的教程,从创建9补丁图像的旋转和使用它在应用程序。 旋转器代码
我试图得到4个Vector2对象,它们代表一个精灵的4个角,在精灵自身围绕其中心旋转时旋转。但是,在下面的代码中,Vector2对象在客户端空间中围绕0,0旋转,而不是围绕对象的中心旋转。使用矩阵变换,是否有任何方法可以围绕对象的中心而不是全局坐标(0,0)旋转Vector2对象? 这是迄今为止旋转的函数:
问题内容: 我试图在这个问题中创建一个类似于“奖杯轮”的可旋转节点。到目前为止,我具有甩尾功能,可以使用效果很好的UIPanGestureRecognizer在物理物体上添加角度脉冲。我也可以通过触摸停止旋转。 现在,我试图通过拖动或滑动手势来微调方向盘,这样,如果玩家对最终的效果不满意,就可以手动旋转/拖动/旋转它所喜欢的旋转方式。 目前,我将触摸的位置保存在touchesBegan中,并尝试在
出于某种原因,我的旋转器中选定项的文本颜色为白色。以下是活动的代码: 下面是simple_spinner_item的XML: 下拉项显示为红色,但不显示所选项。我试图将XML中的textColor更改为selector:并创建了这个选择器: 但是所选项目的文本颜色仍然是白色。所以我尝试在OnItemSelectedListener中这样做: 还是白色的... 为什么会发生这种情况,我如何修复它?谢