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
Trả lời
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.
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 –
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);
}
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
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
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.
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
}
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