如何在codenameone中绘制矩形和圆形

时间:2019-01-14 13:33:17

标签: codenameone

我正在尝试在图像上绘制矩形,但效果很好,但是我想从用户触摸手指的点开始绘制矩形,应该将手指触摸作为中间点并在其周围绘制矩形。我尝试使用drawRect()方法甚至常规路径。这是我的代码。

                GeneralPath pp= new GeneralPath();
                pp.moveTo(currentLine.startX, currentLine.startY-offset / 2);
                pp.lineTo(currentLine.startX, currentLine.startY + offset /2);
                pp.lineTo(currentLine.startX + offset, currentLine.startY + offset /2);
                pp.lineTo(currentLine.startX + offset, currentLine.startY -offset /2);
                pp.lineTo(currentLine.startX, currentLine.startY-offset / 2);

                pp.closePath();

                g.drawShape(pp, stroke);

 //tried even this method
g.drawRect(currentLine.startX, currentLine.startY , currentLine.startX , currentLine.startY, currentLine.girth);

这里的当前线点不过是手指触摸的坐标。

为了绘制圆圈,我在代码中使用了drawArc()方法

// to draw circle g.drawArc(currentLine.startX, currentLine.startY , currentLine.startX , currentLine.startY, 0, 360);

但是在这种情况下如何更改笔划厚度?甚至在用户触摸屏时,我还需要从中心点绘制。

在两种情况下,我都不想拖动和绘制形状。每当用户触摸屏时,都需要以触摸为中心来绘制所选图像,并且不应在图像边界之外绘制形状。

任何对此的解决方案将是有帮助的。谢谢

1 个答案:

答案 0 :(得分:0)

始终在0,0处绘制矩形或形状,然后使用“平移”将其放置在屏幕中。它使代码更简单。因此:

g.drawRect(0, 0, fourMM, fourMM);

现在,您要向下移动指针以确定X / Y,然后拖动以调整大小。只需添加这些:

g.translate(pointerInitialX, pointerInitialY);
g.scale(factorW, factorH);
g.drawRect(0, 0, fourMM, fourMM);
g.resetAffine();

重置仿射可恢复原始翻译。我建议注释掉比例,然后研究“感觉”正确的比率公式。这需要一些差异很大的技巧。