Blackberry java,刷新自定义动画横幅

Blackberry java,刷新自定义动画横幅,blackberry,java-me,gif,animated-gif,Blackberry,Java Me,Gif,Animated Gif,我想在我的应用程序顶部显示一个.gif横幅。我正在使用此代码显示动画字段。问题是我想每分钟刷新一次这个横幅。我试过很多东西: 创建新对象,但这不会更改横幅 创建一个新的动画字段并尝试替换它….IllegalArgumentException。(我正在尝试从线程内部使用调用器()来更改它……我也使用了invokeAndWait()) 删除此动画字段并放置一个新字段(从invokeLater()或invokeAndWait()->IllegalException) 将位图设置到此字段。第一个动画没

我想在我的应用程序顶部显示一个.gif横幅。我正在使用此代码显示动画字段。问题是我想每分钟刷新一次这个横幅。我试过很多东西:

  • 创建新对象,但这不会更改横幅

  • 创建一个新的动画字段并尝试替换它….
    IllegalArgumentException
    。(我正在尝试从
    线程内部使用
    调用器()
    来更改它……我也使用了
    invokeAndWait()

  • 删除此动画字段并放置一个新字段(从
    invokeLater()
    invokeAndWait()
    ->
    IllegalException

  • 将位图设置到此字段。第一个动画没有显示,我可以看到另一个横幅上的图像,但它没有动画

有什么想法吗


如果您需要查看一些代码,我将尝试在明天发布。

如果您使用的黑莓操作系统的最低版本为6.0(或更高版本),请使用
位图字段

如果需要支持较低版本的操作系统,则只需向
AnimatedGIFField
类添加一个方法,以替换旧图像,并使用新图像:

public void setImage(EncodedImage image) {
    // Call BitmapField#setImage()
    super.setImage(image);

    // Store the image and its dimensions.
    _image = image;
    _width = image.getWidth();
    _height = image.getHeight();
    _currentFrame = 0;

    // Stop the previous thread.
    _animatorThread.stop();

    // Start a new animation thread.
    _animatorThread = new AnimatorThread(this);
    _animatorThread.start();
}
请注意,这是一个UI操作。因此,如果要从后台线程更新图像,请确保使用将其放在UI线程上的调用对其进行包装。例如:

 final EncodedImage eImage = EncodedImage.getEncodedImageResource("img/banner.gif");
 UiApplication.getUiApplication().invokeLater(new Runnable() {
     public void run() { 
         _animatedBanner.setImage(eImage);
     }
 });
更新:我还注意到
AnimatedGIFField
类的工作方式并不是很好的多线程实践(用于停止线程)。如果你真的想让代码变得更好,你可以,或者


阅读。

如果您使用的黑莓操作系统的最低版本为6.0(或更高版本),
位图字段

如果需要支持较低版本的操作系统,则只需向
AnimatedGIFField
类添加一个方法,以替换旧图像,并使用新图像:

public void setImage(EncodedImage image) {
    // Call BitmapField#setImage()
    super.setImage(image);

    // Store the image and its dimensions.
    _image = image;
    _width = image.getWidth();
    _height = image.getHeight();
    _currentFrame = 0;

    // Stop the previous thread.
    _animatorThread.stop();

    // Start a new animation thread.
    _animatorThread = new AnimatorThread(this);
    _animatorThread.start();
}
请注意,这是一个UI操作。因此,如果要从后台线程更新图像,请确保使用将其放在UI线程上的调用对其进行包装。例如:

 final EncodedImage eImage = EncodedImage.getEncodedImageResource("img/banner.gif");
 UiApplication.getUiApplication().invokeLater(new Runnable() {
     public void run() { 
         _animatedBanner.setImage(eImage);
     }
 });
更新:我还注意到
AnimatedGIFField
类的工作方式并不是很好的多线程实践(用于停止线程)。如果你真的想让代码变得更好,你可以,或者


阅读。

是的!我正在使用OS 5,setImage方法工作得非常完美!谢谢是 啊我正在使用OS 5,setImage方法工作得非常完美!谢谢