MIDP图形用户界面 (2).ppt
第7章 MIDP图形用户界面低级API,本章学习导航,本章学习要点,(1)Canvas类概述;(2)处理Canvas类键盘事件;(3)处理Canvas类屏幕事件;(4)Graphics类概述;(5)Graphics类的绘图操作;(6)Graphics类的颜色操作;(7)Graphics类的文字操作;(8)Graphics类的图像操作。,7.1 Canvas类的使用,使用javax.microedition.lcdui包中的低级API,可以实现一些相对比较复杂的图形或者访问底层输入事件。进行低级API开发时主要用到两个类:Canvas类和Graphics类。Canvas类是一个抽象类,利用Canvas类提供的相关方法可以处理低级事件和在屏幕上绘画。,Canvas类概述,7.1 Canvas类的使用,Canvas类常用方法,7.1 Canvas类的使用,Canvas实例,【例7-1】第一个Canvas程序(FirstCanvasDemo.java),教师演示讲解,7.1 Canvas类的使用,Canvas处理按键事件是通过keyPressed方法、keyReleased方法和keyRepeated三个方法实现的。在开发的时候一定要用Canvas.hasRepeatedEvents方法来进行实际的检测,看是否支持keyRepeated 方法。,键盘事件,7.1 Canvas类的使用,Canvas键盘事件实例,【例7-2】演示Canvas的键盘事件(FirstCanvasDemo.java),教师演示讲解,7.1 Canvas类的使用,Canvas有两种模式,一种是正常模式,另一种是全屏模式,两者之间的区别在于当我们使用全屏幕模式的时候,添加在Canvas上面的Title和Ticker和 Command都无法在屏幕上显示,而正常模式下可以。利用Canvas的setFullScreenMode方法可以设定Canvas的模式。当我们调用setFullScreenMode方法的时候,不管是什么模式,都会调用sizeChanged这个方法,并传入屏幕的高度和宽度作为其参数。对于某些突发事件(如:来电),手机屏幕会被系统画面所覆盖的时候,就会调用hideNotify方法;当恢复原状时,就会调用我们原本的画面,那么系统就会同时调用showNotify()这个方法。在实际操作过程当中,应该覆写这两个方法,以便在可见性变化时,使程序做出相应的反应。Canvas会在它被显示的时候自动调用paint()方法,所以我们不必去显式的调用repaint()方法。,屏幕事件,7.1 Canvas类的使用,Canvas屏幕事件实例,【例7-3】演示Canvas的屏幕模式(FirstCanvasDemo.java),教师演示讲解,7.2 Graphics类的使用,javax.microedition.lcdui包中的Graphics类提供了简单的2D绘图功能。它具有24位深度颜色的绘制能力,以三原色分别占一个字节表示其颜色。Graphics的各种绘图功能是通过该类提供的各种方法来实现的,Graphics类的常用方法见表7-3。,Graphics类概述,7.2 Graphics类的使用,Graphics类常用方法,7.2 Graphics类的使用,MIDlet程序中使用最多的图像模式是PNG(Portable Network Graphics,可移植的网络图像)PNG格式可以提供透明背景的图像(方便于绘制游戏画面等)PNG格式的图片中包含许多定义其图片特性的冗余信息,可以方便的对图片进行分割和合并。,7.2 Graphics类的使用,Graphics绘图时用到的坐标系和平时数学中用到的坐标系不一样,Graphics类坐标系的坐标原点在屏幕的左上角,x坐标自左向右递增,y坐标自上向下递增。,绘图操作坐标概念,7.2 Graphics类的使用,使用Graphics类绘制的直线有两种类型:其中SOLID表示绘制实线;DOTTED表示绘制虚线,绘制的直线类型可以通过setStrokeStyle方法进行设置。,绘图操作绘制直线,【例7-4】演示利用Graphics类绘制直线(DrawLineDemo.java),7.2 Graphics类的使用,Graphics类绘图实例,【例7-5】演示利用Graphics类绘制各种图形(DrawLineDemo.java),教师演示讲解,7.2 Graphics类的使用,颜色操作,在利用Grahpics类进行绘图操作时,我们经常要给图形添加各种各样的颜色。图形的颜色的设置可以通过setColor方法实现。对于具体的颜色中的R(红)、G(绿)、B(蓝)的组成可以分别使用getRedComponent方法、getGreenComponent方法和getBlueComponent 方法来获得。,7.2 Graphics类的使用,颜色操作实例,【例7-6】演示Graphics类的设置和获取颜色相关方法(ColorDemo.java),教师演示讲解,7.2 Graphics类的使用,文字操作,在使用Graphics类绘制文字或输出图像时,无论是图像还是文字在Graphics中都是通过锚点(指文字和图像被开始绘制处的坐标)来控制它们具体的方位。,7.2 Graphics类的使用,文字操作,锚点的具体位置如下图所示。,7.2 Graphics类的使用,文字操作,锚点的具体位置如下图所示。有效的定位应该是这7个静态常量之一,或者通过逻辑运算符”|”连接的常量组合。,7.2 Graphics类的使用,文字操作,利用Graphics类进行文字输出时,既可以使用drawString方法输出字符串,也可以使用drawChar方法输出字符。Graphics类中一共定义了4个方法来绘制文本。public void drawChar(charcharacter,intx,inty,intanchor)public void drawChars(chardata,intoffset,intlength,intx,inty,intanchor)public void drawString(Stringstr,intx,inty,intanchor)public void drawSubstring(Stringstr,intoffset,intlen,intx,inty,intanchor),7.2 Graphics类的使用,文字操作字体,每个Graphics对象都有一个Font对象与其关联来进行文字的渲染操作,通过调用其相关方法可以对字体对象进行操作,例如:调用方法setFont(null)即可使字体恢复到默认状态。,7.2 Graphics类的使用,文字操作实例,【例7-7】演示利用Graphics类输出文字的方法(DrawCharDemo.java),教师演示讲解,7.2 Graphics类的使用,图像操作,Image分为可变和不可变两种类型的,不可变的Image是从资源文件、二进制数据、RGB数值及其他Image直接创建的。通过Image.createImage(String name)方法从指定的路径中读取需要创建Image所必须的数据(参数中的字符串必须以“/”打头,并且包括完整的名称)。可变的Image以给定的大小创建,它是可以修改的,可变的Image由Image.createImage(int width,int height)方法来创建,需要给定长宽,Image的其他显示特性和机器的显示屏完全一致。在一些游戏程序中,经常会看到画面“撕裂”现象,即显示在屏幕上的画面会由前一帧画面的一部分和后一帧画面的一部分组成。这种“撕裂”现象产生的原因是因为显示屏在显示图像前都会先参照影象内存,然后当绘制速度慢到一定程度时,造成前后两帧内容的交叉(撕裂)。手机厂商考虑支持DoubleBuffer(双缓冲区)以避免画面撕裂的产生。利用Canvas的isDoubleBuffered方法可以检查硬件厂商是否在硬件上支持双缓冲区。,7.2 Graphics类的使用,图像操作实例,【例7-8】演示利用Graphics类输出图像的方法(DrawImageDemo.java),教师演示讲解,【任务1】编写程序,利用Canvas类的keyPressed方法、keyReleased方法和keyReapeated来测试Canvas类的键盘事件。并思考键盘事件在游戏开发中有什么样的作用。【任务2】编写程序,利用两个Command对象和Ticker组件测试Canvas类的屏幕事件。并思考全屏幕模式和正常模式在游戏开发中的使用场合。,课堂实践,课堂实践7-1,【任务1】编写程序,利用Graphics类在手机屏幕中央输出三行“这是测试文字”,参考界面如图7-17所示。【任务2】编写程序,利用Graphics类在手机屏幕的中央输出指定的图像和文字,参考界面如图7-18所示。,课堂实践,课堂实践7-2,【思考题】MIDP高级用户界面和MIDP低级用户界面各自适合的场合是什么?javax.microedition.lcdui包中分别提供了哪些类来支持高级用户界面和低级用户界面的开发。【实践题】利用Canvas类和Graphics类编写一个简单的绘图程序,要求能够根据指定的按钮绘制相应的图形。,课外拓展,课外拓展,