第7章 低级用户界面编程.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第7章 低级用户界面编程.ppt》由会员分享,可在线阅读,更多相关《第7章 低级用户界面编程.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章 低级用户界面编程低级用户界面编程郝玉龙E_mail:J2ME移动应用开发移动应用开发电子讲义电子讲义n n7.17.1低级用户界面编程概述低级用户界面编程概述n n7.2 Graphics7.2 Graphics绘图绘图n n7.37.3底层事件处理底层事件处理n n7.47.4高级高级CommandCommand命令处理命令处理 n n7.57.5高级事件与低级事件的并发高级事件与低级事件的并发n n7.67.6高级屏幕与低级屏幕的协同高级屏幕与低级屏幕的协同n n7.77.7屏幕事件处理屏幕事件处理n n7.87.8深入研究屏幕绘制深入研究屏幕绘制n n7.97.9开发自定义组
2、件开发自定义组件n n小结小结7.1低级用户界面编程概述低级用户界面编程概述n n高级用户界面高级用户界面APIAPI使用起来比较简单,且具有较高使用起来比较简单,且具有较高的可移植性,但由于是通过底层的的可移植性,但由于是通过底层的MIDPMIDP实现来控实现来控制最终的制最终的UIUI显示,因此无法实现对屏幕显示,因此无法实现对屏幕UIUI组件外组件外观的精确控制。观的精确控制。n n在一些手机游戏等程序的实现中,要求开发人员在一些手机游戏等程序的实现中,要求开发人员必须对屏幕画面的每一个细节都要进行精确控制,必须对屏幕画面的每一个细节都要进行精确控制,这就需要用到低级用户界面这就需要用到
3、低级用户界面APIAPI来进行界面开发。来进行界面开发。n n利用低级用户界面利用低级用户界面APIAPI,开发者可以对界面进行更,开发者可以对界面进行更精确的控制,但在获得更大的灵活性的同时也失精确的控制,但在获得更大的灵活性的同时也失去了可移植性。去了可移植性。7.1低级用户界面编程概述 MIDP为程序开发人员提供了一组低层API。低层API由Canvas类和一组辅助支撑类(例如图形、字体和图像)组成。用户利用这些低级API可对设备精确控制,如绘制像素、接收原始的用户输入事件等。与高级API相比,开发人员可以更加灵活地控制屏幕绘制,但同时开发的复杂程度也大大提高,并在一定程度上丧失了程序的
4、移植性。n n低级用户界面编程必须使用两个关键类:低级用户界面编程必须使用两个关键类:CanvasCanvas类和类和GraphicsGraphics类。类。n nCanvasCanvas是个抽象类,代表要绘制的抽象屏幕。为是个抽象类,代表要绘制的抽象屏幕。为使用低层使用低层APIAPI建立用户界面,应用程序必须建立建立用户界面,应用程序必须建立CanvasCanvas的一个子类,并实现的一个子类,并实现paint()paint()方法。方法。n nGraphicsGraphics类的实例是作为参数传递给类的实例是作为参数传递给paint()paint()的,它的,它提供了设备绘图能力的入口,
5、它允许在像素层面提供了设备绘图能力的入口,它允许在像素层面直接与显示设备交互操作。任何时候系统需要绘直接与显示设备交互操作。任何时候系统需要绘制屏幕时,都将调用制屏幕时,都将调用CanvasCanvas类的类的paint()paint()方法。方法。n n低级用户界面编程的核心任务在于在低级用户界面编程的核心任务在于在CanvasCanvas类的类的paintpaint()()方法中如何利用方法中如何利用GraphicsGraphics对象进行绘图操作。对象进行绘图操作。n n任何时候开发人员都可以用任何时候开发人员都可以用repaint()repaint()来产生重绘事来产生重绘事件,从而间
6、接调用件,从而间接调用CanvasCanvas类的类的paint()paint()方法绘制屏幕。方法绘制屏幕。repaintrepaint()()一共有两个同名方法,其中一个需要四个参数,一共有两个同名方法,其中一个需要四个参数,分别是起始坐标(分别是起始坐标(x x,y y),还有宽度和高度,另),还有宽度和高度,另外一个不需要任何参数,它是代表整个屏幕全部外一个不需要任何参数,它是代表整个屏幕全部重新绘制,显然,前者的效率较后者要高,实际重新绘制,显然,前者的效率较后者要高,实际开发中也大多数是用前者而不是后者。开发中也大多数是用前者而不是后者。n n注意:在应用程序中永远不要自行调用注意
7、:在应用程序中永远不要自行调用paint()paint()方方法,要重画屏幕或者重画屏幕中的一部分,应当法,要重画屏幕或者重画屏幕中的一部分,应当使用使用repaint()repaint()方法。方法。n n程序程序7 71 1:MyCanvas.javaMyCanvas.javan nimport import javax.microedition.lcdui.Canvasjavax.microedition.lcdui.Canvas;n nimport import javax.microedition.lcdui.Graphicsjavax.microedition.lcdui.Grap
8、hics;n npublic class public class MyCanvasMyCanvas extends Canvas extends Canvas n nprotected void protected void paint(Graphicspaint(Graphics g)g)n ng.setColor(255g.setColor(255,255255,255);255);n ng.fillRect(0g.fillRect(0,0 0,getWidthgetWidth()(),getHeightgetHeight();();n ng.setColor(0g.setColor(0
9、,0 0,255);255);n n g.drawString(Hellog.drawString(Hello,worldworld,1010,1010,Graphics.TOP|Graphics.LEFTGraphics.TOP|Graphics.LEFT););n n n n n n程序程序7 72 2:CanvasTest.javaCanvasTest.javan nimport import javax.microedition.lcdui.Displayjavax.microedition.lcdui.Display;n nimport import javax.microediti
10、on.midlet.MIDletjavax.microedition.midlet.MIDlet;n nimport import javax.microedition.midlet.MIDletStateChangeExceptionjavax.microedition.midlet.MIDletStateChangeException;n npublic class public class CanvasTestCanvasTest extends extends MIDletMIDlet n n private Display private Display displaydisplay
11、;n npublic public CanvasTestCanvasTest()()n nsuper();super();n n n nprotected void protected void startAppstartApp()throws()throws MIDletStateChangeExceptionMIDletStateChangeException n ndisplay=display=Display.getDisplay(thisDisplay.getDisplay(this););n nMyCanvasMyCanvas mc=new mc=new MyCanvasMyCan
12、vas();();n ndisplay.setCurrent(mcdisplay.setCurrent(mc););n n n nprotected void protected void pauseApppauseApp()()n n n nprotected void protected void destroyApp(booleandestroyApp(boolean arg0)throws arg0)throws MIDletStateChangeExceptionMIDletStateChangeException n n n n 图图71 程序程序72运行结果画面运行结果画面7.2
13、 Graphics绘图n n7.2.1Graphics绘图坐标图图72 绘图坐标系对比绘图坐标系对比XY笛卡儿坐标系XYGaphics绘图坐标系 7.2.2颜色操作颜色操作n n在绘制任何对象之前,必须首先为Graphics对象指定当前颜色,然后就能按照预先设定颜色显示绘制的各种对象。可以使用用如下方法进行颜色设定。n n void void setColor(intsetColor(int RGB)RGB)n nvoid void setColor(intsetColor(int red red,intint green green,intint blue)blue)n nvoid void
14、 setGrayScale(intsetGrayScale(int value)value)7.2.3绘图操作绘图操作表表表表7 71 Graphics1 Graphics常见绘图操作常见绘图操作常见绘图操作常见绘图操作方法说明void drawArc(int x,int y,int width,int height,int startAngle,int arcAngle)绘制弧形void drawChar(char character,int x,int y,int anchor)绘制特定字符void drawChars(char data,int offset,int length,int
15、 x,int y,int anchor)绘制字符数组Void drawImage(Image img,int x,int y,int anchor)绘制一幅图像void drawLine(int x1,int y1,int x2,int y2)绘制一条直线void drawRect(int x,int y,int width,int height)绘制一个矩形void drawRegion(Image src,int x_src,int y_src,int width,int height,int transform,int x_dest,int y_dest,int anchor)拷贝图像的
16、一部分并经过转换后复制到一指定位置void drawRGB(int rgbData,int offset,int scanlength,int x,int y,int width,int height,boolean processAlpha)绘制一组设备独立的RGB和透明度值到一指定区域.void drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)绘制一个圆角矩形void drawString(String str,int x,int y,int anchor)绘制字符串void drawSub
17、string(String str,int offset,int len,int x,int y,int anchor)绘制特定字符串的一部分void fillArc(int x,int y,int width,int height,int startAngle,int arcAngle)填充指定矩形内的圆或椭圆void fillRect(int x,int y,int width,int height)填充矩形void fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)填充圆角矩形void fi
18、llTriangle(int x1,int y1,int x2,int y2,int x3,int y3)填充三角形7.2.4 绘制几何图形绘制几何图形n n程序程序7 74 4:GraphicsDemo.javaGraphicsDemo.javan nimport import javax.microedition.lcdui.Canvasjavax.microedition.lcdui.Canvas;n nimport import javax.microedition.lcdui.Graphicsjavax.microedition.lcdui.Graphics;n npublic cl
19、ass public class GraphicsDemoGraphicsDemo extends Canvas extends Canvas n nprotected void protected void paint(Graphicspaint(Graphics g)g)n ng.drawRect(20g.drawRect(20,3030,3030,30);30);n ng.setColor(0g.setColor(0,255255,0);0);n ng.fillRect(60g.fillRect(60,6060,3030,30);30);n ng.setColor(255g.setCol
20、or(255,255255,0);0);n ng.drawArc(100g.drawArc(100,100100,5050,5050,0 0,360);360);n ng.fillArc(160g.fillArc(160,160160,5050,5050,0 0,270);270);n ng.setColor(0 xff0000);g.setColor(0 xff0000);n ng.fillTriangle(10g.fillTriangle(10,100100,9090,160160,1010,140);140);n n n n 图图76 绘制各种几何图形绘制各种几何图形7.2.5线型线型n
21、 nGraphicsGraphics类中保留了绘制各种图形时使用的类中保留了绘制各种图形时使用的2 2个式个式样的线条类型:样的线条类型:DOTTEDDOTTED和和SOLIDSOLID。由于。由于fillfill方法方法绘制的是填充图形而绘制的是填充图形而drawdraw方法绘制的是线框图形,方法绘制的是线框图形,因此因此drawdraw方法下,线型的指定是有效的,而在方法下,线型的指定是有效的,而在fillfill方法中线型的设定是无效的。方法中线型的设定是无效的。n n可以利用以下方法设定线形:可以利用以下方法设定线形:n nvoid void setStrokeStyle(intset
22、StrokeStyle(int style)style)n n其中,若要指定其中,若要指定DOTTEDDOTTED时,时,GraphicsGraphics类的参数就是类的参数就是Graphics.DOTTEDGraphics.DOTTED,指定,指定SOLIDSOLID时,时,GraphicsGraphics类的参数类的参数就是就是Graphics.SOLIDGraphics.SOLID。n n程序程序7 75 5:StrokeStyleCanvas.javaStrokeStyleCanvas.javan nimport import javax.microedition.lcdui.Canv
23、asjavax.microedition.lcdui.Canvas;n nimport import javax.microedition.lcdui.Graphicsjavax.microedition.lcdui.Graphics;n npublic class public class StrokeStyleCanvasStrokeStyleCanvas extends Canvas extends Canvasn nprotected void protected void paint(Graphicspaint(Graphics g)g)n ng.setStrokeStyle(Gra
24、phics.SOLIDg.setStrokeStyle(Graphics.SOLID););n ng.drawRect(10g.drawRect(10,1010,150150,150);150);n ng.setStrokeStyle(Graphics.DOTTEDg.setStrokeStyle(Graphics.DOTTED););n ng.drawRect(30g.drawRect(30,3030,120120,120);120);n nn n n n 图图77 不同线型下的图形绘制效果不同线型下的图形绘制效果7.2.6绘制文本绘制文本可以使用以下方法描绘Canvas上的文本:n n v
25、oid drawChar(char character,int x,int y,int anchor)n n void drawChar(char data,int offset,int length,int x,int y,int anchor)n n void drawString(String string,int x,int y,int anchor)n n void drawSubString(String str,int offset,int length,int x,int y,int anchor)n n程序程序7 76 6:AnchorCanvas.javaAnchorCan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 低级用户界面编程 低级 用户界面 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内