2012-08-09 23 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