【发布时间】:2013-11-28 22:45:58
【问题描述】:
我需要创建一个类 AnimatedImage,它将获取一个 Image 对象数组并在给定的时间间隔内以循环方式显示它们。
这个想法是让 Swing 组件使用这个 AnimatedImage 类,就像它们使用常规 BufferedImage 来显示图像一样。 AnimatedImage会循环切换实际图片,并通知swing组件显示下一张实际图片。
我的问题是我找不到通知摆动组件 AnimatedImage 已切换实际图像的方法。
希望你能明白我的意思。
任何帮助将不胜感激!
到目前为止我做了什么:
public class AnimatedImage extends BufferedImage
{
private final Image[] images;
private int imageIndex = 0;
public AnimatedImage(Image[] images, int interval)
{
super(images[0].getWidth(null), images[0].getHeight(null), BufferedImage.TYPE_INT_ARGB);
this.images = images;
ActionListener listener = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
iterate();
}
};
Timer timer = new Timer(interval, listener);
timer.start();
}
private void iterate()
{
imageIndex = imageIndex + 1 >= images.length ? 0 : imageIndex + 1;
}
public float getAccelerationPriority()
{
return images[imageIndex].getAccelerationPriority();
}
public ImageCapabilities getCapabilities(GraphicsConfiguration gc)
{
return images[imageIndex].getCapabilities(gc);
}
public Image getScaledInstance(int width, int height, int hints)
{
return images[imageIndex].getScaledInstance(width, height, hints);
}
@Override
public Graphics getGraphics()
{
return images[imageIndex].getGraphics();
}
@Override
public int getHeight(ImageObserver observer)
{
return images[imageIndex].getHeight(observer);
}
@Override
public Object getProperty(String name, ImageObserver observer)
{
return images[imageIndex].getProperty(name, observer);
}
@Override
public ImageProducer getSource()
{
return images[imageIndex].getSource();
}
@Override
public int getWidth(ImageObserver observer)
{
return images[imageIndex].getWidth(observer);
}
}
【问题讨论】:
-
“如何扩展 BufferedImage 以创建由多个 BufferedImage 组成的“动画图像” JSE 对动画 GIF 的支持建议
BufferedImage(& @987654324 @ 就此而言)已经支持动画图像。有关创建动画的提示,请参阅 this answer。 -
是的,我知道 JSE 支持动画 GIF。问题是我不想使用实际的动画,而是通过循环切换不同的图像来模拟它。
-
“问题是我不想使用实际的动画......”(耸耸肩)好吧 - 我正在准备一个例子,但我不会打扰。 .
-
@AndrewThompson:如果你是对的,那么我的回答就是错误的。请看我的回答,让我知道。谢谢。
-
@AndrewThompson:如果我错了,那么你真的应该提供一个应该被接受的答案,如果不是为了 OP,那么对于这个网站的未来访问者确实需要动画.再次感谢!