Hallo zusammen,
ich versuche eine Animated GIF auf einer WizardPage darzustellen. Leider wird immer nur das erste und zweite Frame angezeigt. Vielleicht weiß jemand Rat?
Vielen Dank im Voraus!
ich versuche eine Animated GIF auf einer WizardPage darzustellen. Leider wird immer nur das erste und zweite Frame angezeigt. Vielleicht weiß jemand Rat?
Java:
package test;
import org.eclipse.jface.wizard.WizardPage;
public class TestWizardPage2 extends WizardPage {
private ImageLoader loader;
private Canvas canvas;
private Image image;
private int imageNumber;
private GC gc;
private Thread thread;
public TestWizardPage2() {
super("wizardPage");
setTitle("Title");
setDescription("Description");
}
public void createControl(Composite parent) {
final Composite container = new Composite(parent, SWT.NULL);
setControl(container);
{
canvas = new Canvas(container, SWT.NONE);
canvas.setBounds(32, 34, 64, 64);
}
{
loader = new ImageLoader();
loader.load("images/loader.gif");
image = new Image(container.getDisplay(), loader.data[0]);
gc = new GC(image);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent event) {
event.gc.drawImage(image, 0, 0);
}
});
thread = new Thread() {
public void run() {
long currentTime = System.currentTimeMillis();
int delayTime = loader.data[imageNumber].delayTime;
while (currentTime + delayTime * 10 > System
.currentTimeMillis()) {
// Wait till the delay time has passed
}
container.getDisplay().asyncExec(new Runnable() {
public void run() {
// Increase the variable holding the frame number
imageNumber = imageNumber == loader.data.length - 1 ? 0
: imageNumber + 1;
// Draw the new data onto the image
ImageData nextFrameData = loader.data[imageNumber];
Image frameImage = new Image(container.getDisplay(), nextFrameData);
gc.drawImage(frameImage, nextFrameData.x,
nextFrameData.y);
frameImage.dispose();
canvas.redraw();
}
});
}
};
}
thread.start();
}
}
Vielen Dank im Voraus!