仅为gif文件设置动画一次

时间:2016-05-15 09:05:49

标签: codenameone

我通过添加动画在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);
}

The gif I need to play only once.

如何让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在设备中的运行速度非常慢。

1 个答案:

答案 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();
});