屏幕切换

advancedprogramor 2011-04-24 08:58:48
我的应用想实现这样一个功能,就是先在一个屏幕上停留停留若干时间,然后自动切换到主屏幕,我是这样实现的

有两个屏幕类AppMainScreen,AppTempScreen,然后先pushScreen(AppTempScreen),接下来延时若干,再则pushScreen(AppMainScreen),最后就是进入事件分配,enterEventDispatcher(),其代码如下:


public class AppManager extends UiApplication{
public static void main(String[] args){
AppManager AppManagerInstance =new AppManager();
AppManagerInstance.enterEventDispatcher();
}
AppManager() {
AppTempScreen MyTempScreen=new AppTempScreen();
this.pushScreen(MyTempScreen);
this.delay(100000000);
this.popScreen(MyTempScreen);
this.pushScreen(new AppMainScreen());
}
private void delay(long sec){
int i=0;
while(i<sec)i++;
}
}


但是发现这样并不能实现预期功能,结构是,进入程序后,延迟一段时间后显示AppMainScreen定义的屏幕,而不显示 AppTempScreen定义的屏幕。

我认为的原因是,当pushScreen以后,会有一个消息进入消息队列,此消息要得到处理,必须是进入消息分配以后,也就是enterEventDispatcher后,也就是说在delay(100000000)调用前,屏幕显示并没有的到处理,后来又有popScreen的推送消息,还有this.pushScreen(new AppMainScreen());的消息,也就是说,在进入消息分配之前,消息队列中有三个消息,但为什么只处理 this.pushScreen(new AppMainScreen());的消息呢?我不得其解。

寻帮助。
...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liusha0225 2011-06-21
  • 打赏
  • 举报
回复
哥们怎么不结贴啊
liusha0225 2011-06-02
  • 打赏
  • 举报
回复
黑莓里有屏幕切换的例子。


import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.TransitionContext;
import net.rim.device.api.ui.Ui;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.UiEngineInstance;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.FullScreen;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.decor.BackgroundFactory;

public class ScreenTransitionSample extends UiApplication implements
FieldChangeListener {
private Screen _secondaryScreen;
private Runnable _popRunnable;

public static void main(String[] args) {
ScreenTransitionSample theApp = new ScreenTransitionSample();
theApp.enterEventDispatcher();
}

public ScreenTransitionSample() {
_secondaryScreen = new FullScreen();
_secondaryScreen.setBackground(BackgroundFactory
.createSolidBackground(Color.LIGHTBLUE));
LabelField labelField = new LabelField(
"The screen closes automatically in two seconds by using a fade transition");
_secondaryScreen.add(labelField);
TransitionContext transition = new TransitionContext(
TransitionContext.TRANSITION_SLIDE);
transition.setIntAttribute(TransitionContext.ATTR_DURATION, 500);
transition.setIntAttribute(TransitionContext.ATTR_DIRECTION,
TransitionContext.DIRECTION_RIGHT);
transition.setIntAttribute(TransitionContext.ATTR_STYLE,
TransitionContext.STYLE_PUSH);
UiEngineInstance engine = Ui.getUiEngineInstance();
engine.setTransition(null, _secondaryScreen,
UiEngineInstance.TRIGGER_PUSH, transition);
transition = new TransitionContext(TransitionContext.TRANSITION_FADE);
transition.setIntAttribute(TransitionContext.ATTR_DURATION, 500);
transition.setIntAttribute(TransitionContext.ATTR_KIND,
TransitionContext.KIND_OUT);
engine.setTransition(_secondaryScreen, null,
UiEngineInstance.TRIGGER_POP, transition);
MainScreen baseScreen = new MainScreen();
baseScreen.setTitle("Screen Transition Sample");
ButtonField buttonField = new ButtonField("View Transition",
ButtonField.CONSUME_CLICK);
buttonField.setChangeListener(this);
baseScreen.add(buttonField);
pushScreen(baseScreen);
_popRunnable = new Runnable() {
public void run() {
popScreen(_secondaryScreen);
}
};
}

public void fieldChanged(Field field, int context) {
pushScreen(_secondaryScreen);
invokeLater(_popRunnable, 2000, false);
}
}

试试这个
lixin1020 2011-05-17
  • 打赏
  • 举报
回复
UiApplication.getApplication().invokeLater
指定时间
zyl0462 2011-05-05
  • 打赏
  • 举报
回复
private void delay(long sec){
int i=0;
while(i<sec)i++;
}
this.delay(100000000);
主要是这里的问题,这里计算很快的,基本上算是看不见,可以通过Timer和TimerTask来实现
vercity 2011-05-05
  • 打赏
  • 举报
回复
用timer实现

push第二个screen可以写在第一个screen的实现中

1,146

社区成员

发帖
与我相关
我的任务
社区描述
探讨BlackBerry智能手机开发相关的技术、软件、产品等话题。
社区管理员
  • BlackBerry
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧