1.canvas类是实现低级api的Displayable类的子类
应用程序要使用canvas,都必须扩展其paint方法,在绘制方法中可以使用graphic对象绘制图片和基本形状,还可以使用矩形裁剪和坐标的方法便利图形绘制。
低级事件出来未声明未抽象方法,默认实现未空,即可以什么也不做,与用户进行交互的方式可以有键盘和指针2中,并且未了保证程序的移植性,可以将键盘变为动作,不需要提供每个事件处理的方法,应用程序只需要重载其感兴趣的事件处理方法就可以。
1、 Display.getDisplay(this).setCurrent(canvas);
每当display的setCurrent方法设置了canvas的子类作为参数的时候,系统会自动调用该类的paint方法,并传入graphics对象作为参数。
2、setFullScreenMode(true)后,将出发sizeChangeed事件,从系统接受2个参数 canvas全屏后的width和height
对于Display类的其他子类一样,有可能需要在canvas对象上添加一些command,并注册一个commandListener。Command可以根据设备指定方式映射到软键和菜单上,对于某些设备来说,用于command的软键可能与按键事件提供到canvas类的按键相重合,在这种情况下,需要设备提供一种解决冲突的方法,而无需在程序中处理这个冲突。
此外,command软键的显示与否依赖设备,有的设备虽然使用了全屏模式,但是还是能看到command,也即全屏没作用
3、重绘和强制重绘
当使用高级用户界面与用户进行交互的时候,screen对象的任何改变都会自动反应到屏幕上,而不需要应用程序去主动刷新屏幕。但是当一个canvas对象在屏幕上时候,如果对canvas对象做了某些改变,应用程序必须重新处理屏幕的绘制。canvas提供了2中屏幕的绘制
public void repaint(int x,int y,int width,int height)
public void repaint() 效果与repaint(int x,int y,getWidth(),getHeight())效果相同,对于canvas的重绘是异步的,也就是说repaint方法不会等待paint方法的调用结束就会返回。
Display.callSerially(Runnable r)方法将在Displayable的重绘循环结束后调用Runnable对象的run方法。这点可以用于产生动画效果。
为了和paint方法同步,可以使用Display.callserially方法,也可以使用serviceRepaint方法。
如果canvas画布在屏幕上不可见,那么调用这2个方法将不会产生任何效果
对于未处理的重绘请求,Canvas类提供了一种强制重绘的方法:
public void serviceRepaints()
调用次方法的结果是,几个重绘请求只产生一个paint方法的调用,直到挂起重绘请求得到满足,而且所调用的paint方法执行完毕,该方法才返回。同步刷新屏幕对于动画和游戏来说非常重要的。
4】绘制
a、绘制弧形
b、绘制矩形
c、绘制三角形
d、复制区域
5、字体
font类用来表示字体的属性和字体的绘制,应用程序不能使用new方法生成一个信的font类,应用程序可以根据字体的属性请求所需的字体风格,然后系统尽可能接近的方方式提供相匹配的字体风格
public static Font getFont(int face ,int style,int size) 字型,外观,字号
STYLE_PLAIN 值0,表示普通
BOLD 1 粗体
ITALIC 2 斜体
UNDERLINED 4 下划线
字型可以组合使用 (PLAIN不能与其他字型组合使用,因为他的值0,组合没意义)可以用下列方法判断Font的字型和属性:public boolean isBOLD() ....
字号: SIZE_MEDIUM 0 中号字体
SIZE_SMAll 8
SIZE_LARGE 16
字号属性不能组合使用
外观:
FACE_SYSTEM 0 系统字体
FACE_MONOSPACE 32 等宽字体
FACE_PROPORTIONAL 值64 均衡字体
getFace()用来获得外观属性,返回的值只能是0,32,64 不能组合使用