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