2012-08-09 24 views
0

每次我用这个代码创建一个新的矩形它不起作用,我只能绘制到指定位置,如果我使用变量来改变执行位置,它不会绘制任何东西。在新位置多次绘制矩形不工作

里面一个的AsyncTask方法:

rect = new desenho(main.this, x, y); 

至极调用此:

public class desenho extends View{ 

    int x, y; 
    Paint mPaint = new Paint(); 

    public desenho(Context context, int x, int y) { 
     super(context); 
     this.x = x; 
     this.y = y; 
     mPaint.setStrokeWidth(3); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setColor(Color.BLACK); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     setMeasuredDimension(width, y); 
    } 

    @Override 
    protected void onDraw(Canvas c) { 
     // TODO Auto-generated method stub 
     super.onDraw(c); 
     c.drawRect(5, y, width-5, y+x, mPaint); 
    } 
} 
+0

你的背景是不是黑色的呢? :)。 IT看起来像你可能正在黑色背景上画一个黑色的矩形。你也可以尝试使用调试器来遍历代码,以查看drawRect被调用时的值。 – 2012-08-09 19:25:10

+0

在这种情况下,它不绘制任何东西,只有我做这样的事情: c.drawRect(5,5,宽-5,100,mPaint); – Pl4za 2012-08-09 19:25:42

+0

没有背景是白色的,我检查了system.out上的值,他们是正确的..我不知道什么是错的......也许原因是AsyncTaskMethod? – Pl4za 2012-08-09 19:27:43

回答

0

在我看来,你想要的大小是独立的地位。为此,这些要求必须在Canvas.drawRect(左,上,右,下,涂料)满足:

  • 左 - 右=一
  • 顶 - 底= B

其中a,b是恒定的。例如:

c.drawRect(xPos, yPos, xPos + width - 1, yPos + height - 1, mPaint); 

你在这个例子中看到,

  • 左 - 右= XPOS - (XPOS +宽度 - 1)= 1 - 宽度
  • 顶部 - 底部= yPos - (yPos +高度 - 1)= 1 - 高度

两者都是常数→大小是恒定的。

+0

感谢您的回复。但是,如果我承认并正确地做到了这一点,我只能改变矩形的顶部和底部坐标,而且它们总是不变的。当我回家时,我会深刻地分析你的答案。 – Pl4za 2012-08-09 20:24:56

+0

看来你是对的。乍一看,我认为x作为底部参数的一部分是指一些水平属性,但现在我发现它确实是不变的。 – 2012-08-09 21:12:11

+0

顺便说一句,最右边的像素的索引宽度为-1,所以如果你想要你的矩形居中,宽度为5应该是宽度为-6 – 2012-08-10 11:13:09