以下启动画面无法正确显示。当我只按下闪屏时它工作正常,但是当我按下闪屏然后再按下另一个屏幕时它没有。欢迎屏幕是闪屏。
所以这很有用 -
pushScreen(new WelcomeScreen());
但不是这个 -
pushScreen(new WelcomeScreen());
pushScreen(new MenuScreen());
在第二种情况下,菜单屏幕会立即显示,但不会显示在启动画面上。
这是启动画面代码 - 两个类。
package screens;
import com.src.driver.Driver;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.component.LabelField;
public class WelcomeScreen extends SplashScreen {
public WelcomeScreen() {
super(Bitmap.getBitmapResource("icon.png"), 5);
//normal mainscreen items:
//setTitle("SplashScreen Test");
//add(new LabelField("HelloWorld!"));
}
}
package screens;
import java.util.Timer;
import java.util.TimerTask;
import com.src.driver.Driver;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.container.MainScreen;
public class SplashScreen extends MainScreen {
Bitmap popup;
SplashScreen screen = this;
private Timer splashTimer = new Timer();
private TimerTask splashTask;
int count = 0;
int screenWidth = Display.getWidth();
int screenHeight = Display.getHeight();
int yCoord;
int xCoord;
boolean showSplash = true;
boolean splashDisplayed = false;
public SplashScreen(Bitmap popup, final int seconds) {
this.popup = popup;
xCoord = (screenWidth - popup.getWidth()) / 2;
yCoord = (screenHeight - popup.getHeight()) / 2;
splashTask = new TimerTask() {
public void run() {
if (showSplash && !splashDisplayed) {
count++;
if (count == seconds * 10) {
showSplash = false;
splashDisplayed = true;
splashTimer.cancel();
invalidate();
}
}
}
};
splashTimer.scheduleAtFixedRate(splashTask, 100, 100);
}
protected void paint(Graphics graphics) {
super.paint(graphics);
if (showSplash && !splashDisplayed) {
graphics.drawBitmap(xCoord, yCoord, popup.getWidth(), popup.getHeight(), popup, 0, 0);
//draw border, delete if not needed:
//graphics.setColor(0xcccccc);
//graphics.drawRect(xCoord, yCoord, popup.getWidth(), popup.getHeight());
}
}
protected void onUiEngineAttached(boolean attached) {
showSplash = true;
invalidate();
super.onUiEngineAttached(attached);
}
//allow user to dismiss splash screen:
protected boolean navigationMovement(int dx, int dy, int status, int time) {
return DismissSplash();
}
protected boolean navigationClick(int status, int time) {
return DismissSplash();
}
protected boolean keyChar(char c, int status, int time) {
return DismissSplash();
}
private boolean DismissSplash() {
if (showSplash) {
showSplash = false;
splashDisplayed = true;
invalidate();
return true;
}else{
return false;
}
}
}
谢谢
答案 0 :(得分:1)
看起来问题是在WelcomeScreen之后立即推送MenuScreen。在推送MenuScreen之前,您需要设置某种等待WelcomeScreen“完成”的机制。
也许创建一个传递给WelcomeScreen的Listener对象。然后,当WelcomeScreen“完成”时,它将调用监听器(例如myListener.splashScreenFinished()
)。然后,Listener的实现将创建并推送MenuScreen。
这看起来像这样:
interface MyListener {
public void splashScreenFinished();
}
class MyApp implements MyListener {
...
public void splashScreenFinished() {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
pushScreen(new MenuScreen());
}
});
}
public void startupApp() {
pushScreen(new WelcomeScreen(this));
}
...
}
class WelcomeScreen {
private MyListener l;
public WelcomeScreen(MyListener listener) {
l = listener;
...
}
protected onSplashTimerDone() {
if (l != null)
l.splashScreenFinished();
}
}