230 likes | 365 Views
《 J2ME 程序开发设计(上) 》 专业教程 理论讲解部分 Ver 3.1. 课程概述. Canvas 类概述 绘制和重绘屏幕 低级事件. 重点. 绘制和重绘屏幕 低级事件. 掌握 J2ME 低级用户界面. 难点. 绘制和重绘屏幕 低级事件. 学习目标. 6.1 Canvas 类. 6.1.1 Canvas 类概述. 低级用户界面主要用作游戏程序的开发,以及其他需要对屏幕精确控制或者接收低级事件的应用程序。利用低级用户界面 API ,开发者可以对设备进行更精确的控制,但更大的灵活性意味着更少的可移植性。. 6.1 Canvas 类.
E N D
《J2ME程序开发设计(上)》 专业教程 理论讲解部分 Ver 3.1
课程概述 Canvas类概述 绘制和重绘屏幕 低级事件 重点 绘制和重绘屏幕 低级事件 掌握J2ME低级用户界面 难点 绘制和重绘屏幕 低级事件 学习目标
6.1 Canvas类 6.1.1 Canvas类概述 低级用户界面主要用作游戏程序的开发,以及其他需要对屏幕精确控制或者接收低级事件的应用程序。利用低级用户界面API,开发者可以对设备进行更精确的控制,但更大的灵活性意味着更少的可移植性。
6.1 Canvas类 6.1.1 Canvas类概述 Canvas是Displayable的直接子类,属于J2ME中的低级API。用户利用这些低级API可对设备精确控制,如绘制像素、接收原始的用户输入事件等。 Canvas与高级API相比控制更加灵活,但同时是以其复杂性、高成本为代价的,并牺牲了一定的可移植性。它的基本用法与其他Displayable对象一致。
6.1 Canvas类 6.1.1 Canvas类概述 Canvas类是Displayable类的子类,它提供了绘制方法以及应用程序的一些低级事件处理方法。 由于Canvas类的paint方法被声明为抽象方法,所以Canvas类也是一个抽象类。在建立Canvas子类的时候,要求程序提供paint方法的实现。 而低级事件处理方法未声明为抽象方法,其默认实现为空。
6.1 Canvas类 6.1.1 Canvas类概述 显示屏幕上能够实际用于绘制的区域因设备的不同而有所差异。因此为了保证应用程序具有较好移植性,一般不直接设定好屏幕的尺寸,而是通过调用getHeight()和getWidth()方法来获得具体尺寸。 获取屏幕宽度: int width = getWidth(); 获取屏幕高度: int height= getHeight();
6.1 Canvas类 6.1.1 Canvas类概述 Canvas的坐标原点位于左上角,其最下角的坐标为(getWidth(),getHeight())。 屏幕的上部分为设备保留部分,用来向用户指示电量、信号强度、设备状态等。 下面部分用于MIDP设置菜单等,既可以是应用程序设置的Command软键,也可以是MIDP实现自动设置的菜单等软键,其位置由系统决定。
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()) ; }
6.1 Canvas类 6.1.2 绘制和重绘屏幕 在绘制屏幕时,程序中不直接调用paint()方法。当把Canvas的子类对象作为参数设置在setCurrent()方法中时,程序会去自动调用paint()方法。 MyCanvas mc = new MyCanvas() ; display.setCurrent(mc) ;
6.1 Canvas类 6.1.2 绘制和重绘屏幕 重绘时,在应用程序中同样不应该直接调用paint()方法来实现,而应该使用repaint()方法。调用repaint()方法会使系统调用paint()方法。 repaint();
6.1 Canvas类 6.1.3 低级事件 应用程序接受按键事件,对于要向MIDP应用程序报告事件的每个按键都被分配一个按键代码,每个物理键所对应的按键代码的值惟一的。 MIDP定义了按键代码,这些按键代码符合ITU-T标准电话键盘所定义的按键。在键盘上可能会出现其他按键,为了保证可移植性,应用程序应该只使用标准的按键代码。
6.1 Canvas类 6.1.3 低级事件 Canvas类关于按键定义的常量:
6.1 Canvas类 6.1.3 低级事件 Canvas类定义了下列几个按键事件: protected void keyPressed(int keyCode) 当按键被按下时调用; protected void keyReleased(int keyCode) 当按键被释放时调用; protected void keyRepeated(int keyCode) 当按键重复时(保持按下)调用。
6.1 Canvas类 6.1.3 低级事件 当按键被按下时,就会触发keyPressed事件,系统会自动调用keyPressed(int keyCode)方法,所按下的物理键盘对应于键码,程序在获知键码的同时,也就是知道用户按下了什么键,便能够对这个事件进行处理。 public void keyPressed(int keyCode){ System.out.println("按下了" + getKeyName(keyCode) + " ,其值为:" + keyCode); }
6.1 Canvas类 6.1.3 低级事件 当按键按下再释放后,会触发keyReleased事件。同keyPressed事件一样,Canvas类中的这个方法的实现是空的,应用程序要监听按键释放的事件,必须重载keyReleased()方法。 public void keyReleased(int keyCode){ System.out.println("释放了" + getKeyName(keyCode) + " ,其值为:" + keyCode); }
6.1 Canvas类 6.1.3 低级事件 当用户在很短的时间里连续按了两次同样的键,就会触发一个重复按键事件keyRepeated。有些设备支持重复按键事件,有些不支持。应用程序可以使用 检查设备是否支持重复按键事件: public boolean hasRepeatEvents()
6.1 Canvas类 6.1.3 低级事件 在手机游戏开发中,经常使用游戏动作来代替键码。Canvas中定义了游戏动作常量 :
6.1 Canvas类 6.1.3 低级事件 虽然每一个键码都被映射给一个游戏动作,但是一个游戏动作也可以和多个键码相关联。两者之间的转化是通过getKeyCode()和getGameAction()方法完成的。 游戏动作是如何与键码进行映射要根据具体设备来决定。例如,在某些设备上,游戏动作UP、DOWN、LEFT和RIGHT可能被映射到4个导航键上,而在其他设备上,它们可能被映射到某些数字键上。应用程序可以使用getGameAction()方法来将键码转换为游戏动作,从而增强了程序的可移植性。
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相对应的指针的位置。应用程序如果要使用指针事件,就必须实现以上方法。
本课小结 理解Canvas类结构 掌握绘制和重绘屏幕 掌握低级事件
小测验 判断题 1. canvas比screen灵活性更高,复杂性更低() 2. canvas可以用来开发需要精确显示的图形() 3. Graphics可以在canvas中随时获取()
小测验答案 判断题 1. canvas比screen灵活性更高,复杂性更低(错) 2. canvas可以用来开发需要精确显示的图形(对) 3. Graphics可以在canvas中随时获取(错)
课后作业 【作业】编写程序,练习使用低级用户事件