注意
如果直线的绘制超出屏幕,则超出部分的像素将被忽略,因此在使用直线时要考虑屏幕的大小限制。
(1)以坐标(x,y)为起点,沿x轴正方向延伸w个 单位,沿y轴的正方向延伸h个单位,得到一个矩形,此虚拟矩形内切绘制一个椭圆(如果w和h相 等,则为圆)。
(2)以矩形的中心为圆心,以时钟3点的方向为0°,逆时针为正方向,从0°正方向旋转startAngle 度,和椭圆相交得到一条直线和一个交点。
(3)从这条直线开始,正方向旋转arcAngle度,得到另一条直线和交点,这样就得到了一个两交点之间的 圆弧。
(4)这个圆弧和两条直线得到一个封闭的区域, 弧线的绘制和填充就以这个封闭区域为基础。整个绘制过程如图3-5所示。
绘制弧线时,根据弧线得到一个与之最接近的坐标集合,然后填充这些坐标左下角的像素。填充弧时,只对在封闭区 域内的像素进行填充。
对于一个360°的弧线,它会覆盖一个宽为w+1,高为h+1的矩形, 而填充弧则覆盖一个宽为w,高为h的矩形,其中w和h都不为0。
如果w和h为0,则填充弧不会影响任何像素,而只要不全为0,绘制弧则 可能绘制一条直线。Graphics提供了两个方法来分别进行弧形的绘制和填充,例如:
g.setColor(0x000000); //设置画笔颜色为黑色
g.drawArc(5,5,120,60,0,360); //绘制一个弧形
g.setColor(0x00FFFF); //设置画笔颜色为淡蓝色
g.fillArc(10,10,150,70,30,80); //填充一个弧形
3.1.6 绘制圆角矩形Graphics也支持绘制和填充圆角矩形,圆 角矩形是矩形和弧的组合。圆角弧形的坐标表示方法为:RoundRect(x,y,w,h,arcWidth,arcHeight),它的矩形部分用 Rect(x,y,w,h)表示,弧形部分用 Arc(x,y,2*arcWidth,2*arcHeight,0,360)表示,然后由0°开始从圆心分割为90°的4个部分,分别和矩形4个角相 切,组合成一个圆角矩形。圆角矩形的绘制原理如图3-6所示。
Graphics提供了两个方法,分别来进行圆角矩形的绘制和填充,例如:
g.setColor(0x000000); //设置画笔颜色为黑色
g.drawRoundRect(30,40,120,120,20,10); //绘制一个圆角矩形
g.setColor(0x00FF00); //设置画笔颜色为绿色
g.fillRoundRect(60,70,30,60,30,30); //填充一个圆角矩形
3.1.7 绘制三角形MIDP 2.0新增了一个方法用来填充一个三角形,该方法原型为:
fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3);
该方法的6个参数分别代表了三角形3个顶点的X、Y轴坐标。例如:
g.setColor(0x000000); //设置画笔颜色为黑色
g.fillTriangle(30, 40, 30, 100, 10, 0); //填充一个三角形
3.1.8 绘制笔触的设置绘制直线、圆弧、矩形和圆角矩形时可以选择使用SOLID或者DOTTED这两种画笔风格。Graphics 对象提供的画笔风格分为两类。
n SOLID:值为0,表示当前画笔为1个像素宽的实线,填充紧靠指定坐标的右下端像素。
n DOTTED:值为1,表示当前画笔为点线,打点频率和长度由MIDP实现决定,直线和弧线的终点不能保证被绘制,矩形的交点也无法保证被绘制。
setStrokeStyle方法用来设置画笔风格,getStrokeStyle方法用来获取当前的画笔风 格,可以使用Graphics对象在任何地方设置画笔风格,设置后会取代前面的设置,影响后续操作,直到再次改变其设置。例如:
g.setStrokeStyle(Graphics.DOTTED); //将笔触风格设置为点线
g.drawLine(10,20,100,20); //绘制线条
g.drawLine(5,50,5,50); //绘制线条