2

两天来我一直在尝试编写一个简单的代码。我已经尝试了所有更改,但似乎都没有工作。我正在尝试绘制具有不同颜色的垂直矩形。在第一个中,我只使用一个 Rect 变量并移动坐标。这是代码的相关部分。

 Rect myRect1=new Rect();
 Random colorMe=new Random();
for(int j=0;j<5;j++){
    myRect1.set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());
    paint.setColor(Color.rgb(colorMe.nextInt(255), colorMe.nextInt(255), colorMe.nextInt(255)));
    myCanvas.drawRect(myRect1, paint);
}

我尝试的其他更改是通过数组。这是代码。

 Rect[] myRect=new Rect[5];
 Random colorMe=new Random();
for(int j=0;j<5;j++){
    myRect[j].set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());
    paint.setColor(Color.rgb(colorMe.nextInt(255), colorMe.nextInt(255), colorMe.nextInt(255)));
    myCanvas.drawRect(myRect[j], paint);
}

有人可以帮我实际存在什么问题吗?

4

4 回答 4

5

似乎明显错误的第一件事(可能还有更多):

  • 矩形的最小 x 坐标是 myCanvas.getWidth()/5*j
  • 矩形的最大 x 坐标是 myCanvas.getWidth()/5*j

它们都是相同的值,所以你的矩形是退化的。

离题,但非常相关:每当你遇到这样的问题时,你需要把它分解成更小的部分,直到你让它做某事。这将帮助您了解问题所在:

  1. 将所有子表达式(如颜色和生成的 x/y 值)提取到局部变量中,以便您可以在调试器中轻松检查它们
  2. 用预定义的颜色 (COLOR.YELLOW) 替换随机颜色,以排除随机元素
  3. 用一个固定的矩形(比如 (10,10) - (20,20))替换 caclulated 矩形以排除坐标计算。
  4. 更换环路,排除环路。
于 2012-02-18T07:18:44.027 回答
1

您的矩形的宽度为 0px。set() 函数的参数依次为左/上/右/下。您对左右使用相同的值,因此宽度为 (right-left)=0。

于 2012-02-18T07:17:05.883 回答
0

让我们先看看你的坐标:

myRect1.set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());

左上角与右下角具有相同的 x 坐标,因此您正在绘制一个宽度为 0 的矩形。

于 2012-02-18T07:17:49.643 回答
0

添加这一行

myRect[j] = new Rect() 

myRect[j].set(myCanvas.getWidth()/5*j, 0, myCanvas.getWidth()/5*j, myCanvas.getHeight());
于 2017-03-03T11:27:35.507 回答