《 j2me 程序开发设计(上) 》 专业教程 理论讲解部分 ver 3.1
DESCRIPTION
《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1. 课程概述. Canvas 类概述 绘制和重绘屏幕 低级事件. 重点. 绘制和重绘屏幕 低级事件. 掌握 J2ME 低级用户界面. 难点. 绘制和重绘屏幕 低级事件. 学习目标. 6.1 Canvas 类. 6.1.1 Canvas 类概述. 低级用户界面主要用作游戏程序的开发,以及其他需要对屏幕精确控制或者接收低级事件的应用程序。利用低级用户界面 API ,开发者可以对设备进行更精确的控制,但更大的灵活性意味着更少的可移植性。. 6.1 Canvas 类. - PowerPoint PPT PresentationTRANSCRIPT
11
《 J2ME 程序开发设计(上)》专业教程
理论讲解部分
Ver 3.1Ver 3.1
22
第第 55 章 低级用户界面章 低级用户界面
课程概述
Canvas类概述 绘制和重绘屏幕
低级事件
重点
绘制和重绘屏幕 低级事件
难点
绘制和重绘屏幕 低级事件
学习目标
掌握 J2ME 低级用户界面
33
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.1 Canvas 类概述
低级用户界面主要用作游戏程序的开发,以及其他需要对屏幕精确控制或者接收低级事件的应用程序。利用低级用户界面 A
PI ,开发者可以对设备进行更精确的控制,但更大的灵活性意味着更少的可移植性。
44
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.1 Canvas 类概述
Canvas 是 Displayable 的直接子类,属于 J2ME 中的低级API 。用户利用这些低级 API 可对设备精确控制,如绘制像素、接收原始的用户输入事件等。
Canvas 与高级 API 相比控制更加灵活,但同时是以其复杂性、高成本为代价的,并牺牲了一定的可移植性。它的基本用法与其他 Displayable 对象一致。
55
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.1 Canvas 类概述
Canvas 类是 Displayable 类的子类,它提供了绘制方法以及应用程序的一些低级事件处理方法。
由于 Canvas 类的 paint 方法被声明为抽象方法,所以 Canvas 类也是一个抽象类。在建立 Canvas 子类的时候,要求程序提供 paint 方法的实现。
而低级事件处理方法未声明为抽象方法,其默认实现为空。
66
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.1 Canvas 类概述
显示屏幕上能够实际用于绘制的区域因设备的不同而有所差异。因此为了保证应用程序具有较好移植性,一般不直接设定好屏幕的尺寸,而是通过调用 getHeight() 和 getWidth() 方法来获得具体尺寸。
获取屏幕宽度:
int width = getWidth();
获取屏幕高度:
int height= getHeight();
77
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.1 Canvas 类概述
Canvas 的坐标原点位于左上角,其最下角的坐标为 (getWidth() , getHeight()) 。
屏幕的上部分为设备保留部分,用来向用户指示电量、信号强度、设备状态等。
下面部分用于 MIDP 设置菜单等,既可以是应用程序设置的 Command软键,也可以是 MIDP 实现自动设置的菜单等软键,其位置由系统决定。
88
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.2 绘制和重绘屏幕
paint(Graphics g) 方法用来绘制屏幕。这个方法是一个抽象方法,应用程序必须实现这个方法才能够绘制图形。如果在 Canvas 的子类中没有实现这个方法,将会报告编译错误。
paint 方法被传入一个 Graphics 对象 g , g 所设置的矩形区域定义了屏幕上可绘制的区域,也就是需要重绘的区域。而应用程序不需要去了解 paint 调用的底层实现。
public void paint(Graphics g)
{
g.setColor(200,200,255) ;
g.fillRect(0,0,getWidth(),getHeight()) ;
}
99
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.2 绘制和重绘屏幕
在绘制屏幕时,程序中不直接调用 paint() 方法。当把 Canvas 的子类对象作为参数设置在 setCurrent() 方法中时,程序会去自动调用 paint() 方法。
MyCanvas mc = new MyCanvas() ;
display.setCurrent(mc) ;
1010
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.2 绘制和重绘屏幕
重绘时,在应用程序中同样不应该直接调用 paint() 方法来实现,而应该使用 repaint() 方法。调用 repaint() 方法会使系统调用 paint()方法。
repaint();
1111
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件
应用程序接受按键事件,对于要向 MIDP 应用程序报告事件的每个按键都被分配一个按键代码,每个物理键所对应的按键代码的值惟一的。
MIDP 定义了按键代码,这些按键代码符合 ITU-T 标准电话键盘所定义的按键。在键盘上可能会出现其他按键,为了保证可移植性,应用程序应该只使用标准的按键代码。
1212
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件 Canvas 类关于按键定义的常量:
按键代码 ITU 类型 值 按键名称 ( 字符串 )
KEY NUMO 0 static final int 48 0
KEY NUMI 1 static final int 49 1
KEY NUM2 2 static final int 50 2
KEY NLJM3 3 static final int 51 3
KEY NUM4 4 static final int 52 4
KEY NUM5 5 static final int 53 5
KEY NIJM6 6 static final int 54 6
KEY NUM7 7 static final int 55 7
KEY NIJM8 8 static final int 56 8
KEY NUM9 9 static final int 57 9
KEY POUND 井号键 (#) static final int 35 POUND
KEY STAR 星号键 (*) static final int 42 ASTERISK
1313
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件
Canvas 类定义了下列几个按键事件:
protected void keyPressed(int keyCode) 当按键被按下时调用 ;
protected void keyReleased(int keyCode) 当按键被释放时调用 ;
protected void keyRepeated(int keyCode) 当按键重复时(保持按下)调用。
1414
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件
当按键被按下时,就会触发 keyPressed 事件,系统会自动调用keyPressed(int keyCode) 方法,所按下的物理键盘对应于键码,程序在获知键码的同时,也就是知道用户按下了什么键,便能够对这个事件进行处理。
public void keyPressed(int keyCode){
System.out.println(" 按下了 " + getKeyName(keyCode)
+ " , 其值为: " + keyCode);
}
1515
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件
当按键按下再释放后,会触发 keyReleased 事件。同 keyPressed 事件一样, Canvas 类中的这个方法的实现是空的,应用程序要监听按键释放的事件,必须重载 keyReleased() 方法。
public void keyReleased(int keyCode){
System.out.println(" 释放了 " + getKeyName(keyCode)
+ " , 其值为: " + keyCode);
}
1616
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件
当用户在很短的时间里连续按了两次同样的键,就会触发一个重复按键事件 keyRepeated 。有些设备支持重复按键事件,有些不支持。应用程序可以使用
public boolean hasRepeatEvents()
检查设备是否支持重复按键事件:
1717
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件
在手机游戏开发中,经常使用游戏动作来代替键码。Canvas 中定义了游戏动作常量 :
游戏动作 类型 值UP static final int 1
LEFT static final int 2
RIGHT static final int 5
DOWN static final int 6
FIRE static final int 8
GAME_A static final int 9
GAME_B static final int l0
GAME_C static final int 11
GAME_D static final int 12
1818
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件
虽然每一个键码都被映射给一个游戏动作,但是一个游戏动作也可以和多个键码相关联。两者之间的转化是通过 getKeyCode() 和 getGameAction() 方法完成的。
游戏动作是如何与键码进行映射要根据具体设备来决定。例如,在某些设备上,游戏动作 UP 、 DOWN 、 LEFT 和 RIGHT 可能被映射到 4 个导航键上,而在其他设备上,它们可能被映射到某些数字键上。应用程序可以使用 getGameAction() 方法来将键码转换为游戏动作,从而增强了程序的可移植性。
1919
第第 55 章 低级用户界面章 低级用户界面
6.1 Canvas 类
6.1.3 低级事件 对于触摸屏而言,指针可以是接触屏幕的任何物体,通常是一支
输入笔。有 3种类型的指针事件:指针接触事件、指针释放事件以及指针拖动事件。相应地,也有 3种类型的 指针处理方法。如下:
( 1) protected void pointerDragged(int x , int y) ,当指针拖动时调用;
( 2) protected void pointerPressed(int x , int y) ,当指针按下时调用;
( 3) protected void pointerReleased(int x , int y) ,当指针释放时调用。
参数 x 和 y 分别是和 Canvas 相对应的指针的位置。应用程序如果要使用指针事件,就必须实现以上方法。
2020
第第 55 章 低级用户界面章 低级用户界面
本课小结
理解 Canvas 类结构
掌握绘制和重绘屏幕
掌握低级事件
2121
第第 55 章 低级用户界面章 低级用户界面
小测验
判断题
1. canvas 比 screen 灵活性更高,复杂性更低()
2. canvas 可以用来开发需要精确显示的图形()
3. Graphics 可以在 canvas 中随时获取()
2222
第第 55 章 低级用户界面章 低级用户界面
小测验答案
判断题
1. canvas 比 screen 灵活性更高,复杂性更低(错)
2. canvas 可以用来开发需要精确显示的图形(对)
3. Graphics 可以在 canvas 中随时获取(错)
2323
第第 55 章 低级用户界面章 低级用户界面
课后作业
【作业】编写程序,练习使用低级用户事件