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()将自身弹出堆栈。
第一个屏幕中的代码:
第二个屏幕中的代码:
点评:这种实现方式比较简单,但是效果一般。
实现二: 使用Graphics封装
思路:使用Graphics封装一个LabelField,然后在navigationMovement()方法中重绘每个Field。
代码:(正在编写中,先做个标记)
点评:可以使用这种方法封装一个Tabbed Pane,界面颜色、宽度、高度、字体等都可以自行设置,界面比较华丽,但是代码比较复杂。
两种实现方法:
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,界面颜色、宽度、高度、字体等都可以自行设置,界面比较华丽,但是代码比较复杂。
相关文章推荐
- Lwuit TabbedPane无更新
- iOS 类似美团外卖 app 两个 tableView 联动效果实现
- Unity3d 屏幕特效实现类似死亡之后的全屏黑白效果
- Android音视频通话过程中最小化成悬浮框的实现(类似Android8.0画中画效果)
- LWUIT + ChartComponent 之三实现柱体图(HBarChar)
- Repeater绑定时实现类似DataList两列的效果
- js实现类似淘宝继续拖动查看详情的弹簧效果
- 如何在iOS 7中设置barTintColor实现类似网易和 Facebook 的 navigationBar 效果
- Android 自定义实现类似QQ消息贝塞尔拖拽效果BezierView
- j2ME中 lwuit实现按钮缩放功能代码解析
- android实现clickspan点击的效果(类似@好友,当action_up时,效果消失)
- 实现类似百度文库在线查看文档效果---转
- Android进阶:实现android系统自带查看照片动画效果 类似Gallery手势滑动
- Android: 扩展WebView 和ViewPager实现viewpager中的水平滑动,类似Gmail的效果
- 使用线性布局LinearLayout实现类似计算器的效果
- 利用Silverlight实现类似iGoogle的浮动层拖拽效果
- C语言实现类似wget的进度条效果
- Android 类似未读短信,电话图标显示数字效果如何实现的
- 使用编译时注解简单实现类似 ButterKnife 的效果
- Android HorizontalScrollView结合GridView实现类似网易新闻那样的栏目滑动效果