您的位置:首页 > 产品设计 > UI/UE

BlackBerry实现类似Lwuit的Tabbed Pane效果

2010-01-16 15:56 393 查看
Lwuit虽然有BlackBerry的版本,但是对其源代码进行分析过后才发现并不能直接应用于实际项目中,它将所有版本的包括QWERTY、suretype、touch等的不同系统版本混合到一起,给裁剪带来很大难度。目前对其设计结构并不十分明确,所以源代码的裁剪过程比较混乱。虽然blackberry UI不提供类似Lwuit的分页效果,但是我们可以利用现有的API简单的模仿。等一些目前棘手的问题解决后,再慢慢研究吧。。。

两种实现方法:

1、使用屏幕Screen切换;

2、使用Graphics封装。

这两种方法都要用到滚轮的navigationMovement()事件响应函数,所以必须在需要切换的屏幕中重写这个事件。

实现一:使用屏幕Screen切换

思路:在UiApplication的构造函数中先将这两个屏幕压入堆栈。然后创建两个Sreen,在每个Screen中重写navigationMovement()方法。在navigationMovement()中获取UiApplication的对象,然后调用UiApplication.pushScreen()将另外一个界面压入堆栈。在另外一个界面中,调用UiApplication.popScreen()将自身弹出堆栈。

第一个屏幕中的代码:

/*
* 滚轮滚动事件响应
* 滚轮动作:向上dy=-1,向下dy=1,向左dx=-1,向右dx=1
* @see net.rim.device.api.ui.Screen#navigationMovement(int, int, int, int)
*/
protected boolean navigationMovement(int dx, int dy, int status, int time) {
//	Dialog.alert("TrackBall moved:/r/n"+"x:"+dx+"/r/ny:"+dy);
if(dx > 0 && this.isDisplayed()) {
SillyDown theApp = (SillyDown)this.getApplication();
theApp.popScreen(theApp.getFirstScreen());
return true;
}
return false;
}


第二个屏幕中的代码:

/*
* 滚轮滚动事件响应
* 滚轮动作:向上dy=-1,向下dy=1,向左dx=-1,向右dx=1
* @see net.rim.device.api.ui.Screen#navigationMovement(int, int, int, int)
*/
protected boolean navigationMovement(int dx, int dy, int status, int time) {
// TODO Auto-generated method stub
if(dx < 0 && this.isDisplayed()) {
SillyDown theApp = (SillyDown)this.getApplication();
theApp.pushScreen(theApp.getFirstScreen());
return true;
}
return false;
}


点评:这种实现方式比较简单,但是效果一般。

实现二: 使用Graphics封装

思路:使用Graphics封装一个LabelField,然后在navigationMovement()方法中重绘每个Field。

代码:(正在编写中,先做个标记)

点评:可以使用这种方法封装一个Tabbed Pane,界面颜色、宽度、高度、字体等都可以自行设置,界面比较华丽,但是代码比较复杂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: