我通过添加动画在gif
中添加了cn1
文件。但我需要的是它只运行一次,然后粘在屏幕的底部。现在它一直在循环。
代码:
@Override
protected void beforeAnimation(Form f) {
leaf = (Image) r.getImage("leafFinal.gif");
leafLabel = new Label(leaf);
f.add(FlowLayout.encloseIn(leafLabel));
leafLabel.setVisible(false);
}
@Override
protected void postAnimation(Form f) {
leafLabel.setVisible(true);
leafLabel.getParent().animateLayoutAndWait(2500);
}
如何让gif不能连续运行?
更新:使用scaleImageLabel而不是Label
ScaleImageLabel leafGifImageLabel = new ScaleImageLabel();
f.add(FlowLayout.encloseIn(leafGifImageLabel));
leafGifImageLabel.setVisible(true);
Image leafGif = (Image) r.getImage("800_ng.gif");
Timeline tLeaf = (Timeline) leafGif;
tLeaf.setLoop(false);
leafGifImageLabel.setIcon(tLeaf);
leafGifImageLabel.getParent().revalidate();
如果我使用scaledImageLabel而不是Label,它会起作用,但它会取消其他组件的转换。并且gif在设备中的运行速度非常慢。
答案 0 :(得分:0)
将图像向下转换为时间轴并使用setLoop(false)
:
Timeline tLeaf = (Timeline) r.getImage("leafFinal.gif");
tLeaf.setLoop(false);
leaf = tLeaf;
请注意,这可能会在转换完成之前启动,因此请将此代码编写为:
f.addShowListener(e -> {
Timeline tLeaf = (Timeline) r.getImage("leafFinal.gif");
tLeaf.setLoop(false);
myLabel.setIcon(tLeaf);
myLabel.getParent().revalidate();
});