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);
    }
}
4

1 回答 1

0

在我看来,您希望大小与位置无关。为此,您的 Canvas.drawRect(left, top, right, bottom, paint) 必须满足这些要求:

  • 左-右=一个
  • 顶部 - 底部 = b

其中 a, b 是常数。例子:

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

你在这个例子中看到

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

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

于 2012-08-09T19:35:45.083 回答