2012-11-24 51 views
29

Có cách nào trong Android để vẽ hình chữ nhật được tô đầy với đường viền màu đen không. Vấn đề của tôi là canvas.draw() lấy một đối tượng vẽ, và với kiến ​​thức của tôi, đối tượng vẽ không thể có màu khác cho fill và stroke. Có cách nào để giái quyết vấn đề này không?Vẽ hình chữ nhật đầy với đường viền trong android

+0

Bạn nói đúng. Chỉ cần vẽ trực tràng đầy trước và sau đó đột quỵ xung quanh bên ngoài. – Gene

Trả lời

2

Bạn vẽ hình chữ nhật có màu đường viền và kích thước hình chữ nhật cộng với đường viền, bạn thay đổi màu của hình vẽ và vẽ lại hình chữ nhật với kích thước bình thường.

+10

Lưu ý rằng kết quả này trong một bản vẽ cùng một khu vực gần như hai lần –

100

Thử sơn. setStyle (Paint.Style. FILL) và sơn. setStyle (Paint.Style. STROKE).

Paint paint = new Paint(); 
Rect r = new Rect(10, 10, 200, 100); 

@Override 
public void onDraw(Canvas canvas) { 
    // fill 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.MAGENTA); 
    canvas.drawRect(r, paint); 

    // border 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setColor(Color.BLACK); 
    canvas.drawRect(r, paint); 
} 
+0

Có cách nào để thực hiện việc này cho canvas.drawRoundRect() không? Bởi vì trong trường hợp của tôi, đường viền bây giờ đã làm tròn các góc, mặc dù tôi vẽ nó với canvas.drawRoundRect(). – Chris

+3

Tôi biết rằng câu trả lời là cũ, nhưng tôi muốn chia sẻ dòng này little.setPathEffect (new CornerPathEffect (radius)); để trả lời câu hỏi của Chris. Tôi chỉ trả lời vì có thể ai đó cần giúp đỡ. – Crash

6

Nếu bạn vẽ nhiều chế độ xem thì bạn cũng có thể sử dụng hai loại sơn, một cho nét và một cho điền. Bằng cách đó bạn không cần phải giữ lại chúng.

enter image description here

Paint fillPaint = new Paint(); 
Paint strokePaint = new Paint(); 

RectF r = new RectF(30, 30, 1000, 500); 

void initPaints() { 

    // fill 
    fillPaint.setStyle(Paint.Style.FILL); 
    fillPaint.setColor(Color.YELLOW); 

    // stroke 
    strokePaint.setStyle(Paint.Style.STROKE); 
    strokePaint.setColor(Color.BLACK); 
    strokePaint.setStrokeWidth(10); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    // First rectangle 
    canvas.drawRect(r, fillPaint); // fill 
    canvas.drawRect(r, strokePaint); // stroke 

    canvas.translate(0, 600); 

    // Second rectangle 
    int cornerRadius = 50; 
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, fillPaint); // fill 
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, strokePaint); // stroke 
} 
Các vấn đề liên quan