读书人

【连载】 BlackBerryUI设计大全(3)

发布时间: 2012-12-22 12:05:06 作者: rapoo

【连载】 BlackBerryUI设计大全(三)
1.2MIDP低级UI

与高级UI相比,低级UI就自由很多,任何时候我们可以调用repaint()产生重绘事件,调用完了repaint()会立刻返回,调用paint()回调函数则是由另一个专门的线程来完成。

相对于高级UI提供的丰富的组件,低级UI能够对

我们从javax.microedition.lcdui.Canvas开始了解我们的低级UI,我们要用到低级UI必须要继承Canvas这个抽象类,在 Canvas的核心是paint()这个方法,这个方法做是负责绘制屏幕上的画面,每当屏幕需要重新绘制时,就会产生重绘事件时,系统就会自动调用paint(),并传入一个Graphics对象。

任何时候我们都可以通过调用reapaint()方法来产生重绘事件,它有两个方法,一个需要四个参数,分别用来指示起始坐标(X,Y),长宽,另一个则不需要任何参数,代表整个画面重新绘制。

我们可以通过getWidth()和getHeight() 方法获得Canvas的当前范围大小。每当Canvas 范围大小发生变化时,就会自动调用Canvas类的 sizeChanged()方法。

下面是通用的用低级CANVAS API绘制九宫格程序的源码:

public class MenuCanvas extends Canvas implements CommandListener {

private String[] menuName = new String[] { "login", "picture", "wap",

"phone", "call", "goto", "fuck", "music", "video" };

private int canvaWidth = -1, canvaHeight = -1;

private int maxHeight = -1, imgWidth = -1, imgHeight = -1;

private int focus = 0;

private int fontHeight = -1;

private Image menuImg[] = new Image[9];

private Command exit;



public MenuCanvas() {

exit = new Command("Exit", Command.EXIT, 1);

addCommand(exit);

setCommandListener(this);

canvaWidth = getWidth();

canvaHeight = getHeight();

try {

for (int i = 0; i < menuImg.length; i++) {

menuImg[i] = Image.createImage(28, 28);

Graphics g = menuImg[i].getGraphics();

g.translate(-28 * i, 0);

}

} catch (Exception e) {



System.out.println(e.toString());

}

imgWidth = menuImg[0].getWidth();

imgHeight = menuImg[0].getHeight();

fontHeight = Font.getDefaultFont().getHeight();

maxHeight = imgHeight + fontHeight;

}



public void paint(Graphics g) {

int color = g.getColor();

g.setColor(0xFFFFFF);

g.fillRect(0, 0, canvaWidth, canvaHeight);

int cellWidth = canvaWidth / 3;

int cellHeight = canvaHeight / 3;

g.setColor(color);

for (int i = 0; i < menuImg.length; i++) {

g.drawImage(menuImg[i], cellWidth * (i % 3)

+ (cellWidth - imgWidth) / 2, cellHeight * (i / 3)

+ (cellHeight - maxHeight) / 2, Graphics.TOP

| Graphics.LEFT);

int fontWidth = Font.getDefaultFont().stringWidth(menuName[i]);

g.drawString(menuName[i], cellWidth * (i % 3)

+ (cellWidth - fontWidth) / 2, cellHeight * (i / 3)

+ (cellHeight - maxHeight) / 2 + imgHeight + 1,

Graphics.TOP | Graphics.LEFT);

if (i == focus) {

g.drawRect(cellWidth * (i % 3) + (cellWidth - imgWidth) / 2,



cellHeight * (i / 3) + (cellHeight - maxHeight) / 2,

imgWidth + 1, imgHeight + 1);

}

}

}



public void keyPressed(int key) {

int action = getKeyAction(key);

switch (action) {

case FIRE:

Alert alert = new Alert("You select:", menuName[focus],

menuImg[focus], AlertType.INFO);

alert.setTimeout(Alert.FOREVER);

break;

case UP:

focus = focus - 3;

if (focus < 0) {

focus = focus + 9;

}

break;

……

repaint();

serviceRepaints();

}



public void commandAction(Command c, Displayable dpa) {

if (c == exit) {

}

}

}

最后得到的效果图如下所示



本文来自:http://blog.csdn.net/salvatore_zhang/archive/2010/08/05/5791052.aspx




[最优解释]
难得看到界面啊。。
[其他解释]
黑莓没什么前途
[其他解释]
拿分有奖
[其他解释]
黑莓这种系统和苹果的系统究竟哪个好
[其他解释]
值得学习~~
[其他解释]
值得学习~~
[其他解释]
现在流行IPHONE
[其他解释]
收藏,学习!
[其他解释]
斯蒂芬斯多夫
[其他解释]
只感叹世界强人太多了!

[其他解释]
牛人哪,佩服,这帖子必须顶的...
[其他解释]
把这代码copy下来编译下就能放到手机里用吗?
[其他解释]
唔 ,,,,我测不出来啊
[其他解释]
看不懂
[其他解释]
牛人哪
[其他解释]
牛人哪
[其他解释]
学习了。
[其他解释]
不错的东西
[其他解释]
很好的东西
[其他解释]
请问applet运行出来的效果,是附图片 还是成型产品呀??
[其他解释]
牛人,佩服
[其他解释]
支持黑莓!
[其他解释]
还是用J2ME做的啊,有什么值得炫耀的。。。。。。。
[其他解释]
还是用J2ME做的啊,有什么值得炫耀的。。。。。。。
[其他解释]
该回复于2010-08-13 16:36:02被版主删除
[其他解释]
该回复于2010-08-13 17:26:23被版主删除
[其他解释]
该回复于2010-08-13 17:28:03被版主删除
[其他解释]
该回复于2010-08-13 17:33:02被版主删除
[其他解释]
该回复于2010-08-13 17:01:55被版主删除
[其他解释]
该回复于2010-08-14 11:08:39被版主删除
[其他解释]
该回复于2010-08-14 11:00:56被版主删除
[其他解释]
0.0.0.0.0
[其他解释]
支持开源,支持共享
[其他解释]
http://www.yxspace.com


[其他解释]
支持开源!
[其他解释]
该回复于2010-08-16 13:52:03被版主删除
[其他解释]
该回复于2010-08-16 14:41:26被版主删除
[其他解释]
该回复于2010-10-25 16:50:33被版主删除
[其他解释]
该回复于2010-08-16 17:15:39被版主删除
[其他解释]
不好意思刷点积分
[其他解释]
牛人哪,感觉很强,必须顶的...
[其他解释]
该回复于2010-08-17 09:24:47被版主删除
[其他解释]
该回复于2010-08-17 09:52:51被版主删除
[其他解释]
该回复于2010-08-17 09:28:31被版主删除
[其他解释]
该回复于2010-08-17 10:19:58被版主删除
[其他解释]
该回复于2010-11-17 15:46:51被版主删除
[其他解释]
该回复于2010-08-19 11:08:33被版主删除
[其他解释]
该回复于2011-02-21 10:06:15被版主删除

读书人网 >BlackBerry

热点推荐