我坚持要如何在HBox中为某些图像制作动画 . 在游戏中,有武器箱包含各种稀有的皮肤 . 单击'Open'按钮后,要赢取的可能项目应开始滚动浏览HBox . 想想它几乎像命运之轮,它开始快速并逐渐减慢直到它停在1个名字,但在这种情况下,而不是名称有项目,而不是'wheel',我有一个水平HBox与图像滚动通过 . 这是我想要做的一个很好的例子:http://cases.goaggro.com/ .
目前,我有一个ImageView类的实例,该实例分配给应该包含在要滚动的整个项目组中的每个武器图像,以及一个用于保存所有这些图像的数组 . 在GUI上,我设置了HBox的最大宽度和高度,以便从左到右放置在HBox中的任何3个图像完美地填充其“音量” . 我的第一个问题就在这里 . 如果我尝试做类似的事情
Hbox.getChildren().addAll(itemArray);
它将添加前3个很好,但将继续添加超出HBox边界的图像,直到到达主窗口边界 . 有没有办法在HBox中添加比最大显示图像数量更多的图像(由于我设置的当前HBox尺寸为3),同时防止它们超出HBox边界并且只是隐藏在背面?
第二个问题是,在我的HBox内部动画每个图像的最佳方法是什么,以便它向左滚动但不在HBox边界之外或之外?我需要将最左边的图像向左滑动离开屏幕,同时中间的图像滑动到左侧位置,新的图像从右侧滑入以填充正确的位置,并以逐渐减慢到的速度重复此操作着陆点上的一个项目 .
目前,将此代码添加到'Open'按钮的事件处理程序会将item1,item2和item3中的图像正确添加到HBox中 . 但是,如果我超过3个图像(例如将HBox .addAll()设置为itemArray而不是单独设置前3个项目),它将超过HBox边框并开始将它们放置在场景顶部,直到到达主窗口边框 . NOTE: ImageView类(item1-item15)总共有15个实例,但我将代码缩短为4个,以及将数组内容缩短为4个,因为无论何时放入3个以上的图像都会出现问题HBox .
public class Controller
{
@FXML
private HBox hBox;
public void openCaseAction(ActionEvent actionEvent)
{
final ImageView item1 = new ImageView(new Image(getClass().getResourceAsStream("../images/image1.png")));
final ImageView item2 = new ImageView(new Image(getClass().getResourceAsStream("../images/image2.png")));
final ImageView item3 = new ImageView(new Image(getClass().getResourceAsStream("../images/image3.png")));
final ImageView item4 = new ImageView(new Image(getClass().getResourceAsStream("../images/image4.png")));
final ImageView[] itemArray ={item1,item2,item3,item4};
hBox.getChildren().addAll(item1,item2,item3);
}
}
1 回答
您可能希望为此使用自定义布局而不是HBox . 看一下Display Shelf示例:
下载Java 8 demos and samples from Oracle .
提取样本包 .
运行demo / javafx_samples / Ensemble8.jar程序 .
在程序的搜索栏中键入"Display Shelf" .
查看显示架示例UI和源代码 .
在尊重原始许可条款的同时,根据需要复制和修改 .
它并不完全是您正在寻找的,但它将比尝试动画HBox中的项目更接近起点 .
Oracle DisplayShelf示例代码: