2012-11-24 437 views
29

Android中是否有任何方式绘制带有黑色边框的填充矩形?我的问题是,canvas.draw()需要一个绘画对象,据我所知,绘画对象不能有填充和笔触的不同颜色。有没有解决的办法?在Android中绘制带边框的填充矩形Android

+0

你说得对。只需先画好填充的矩形,然后在外面画一个笔画。 – Gene

回答

2

使用边框的颜色和矩形的大小以及边框绘制矩形,可以更改绘画的颜色并再次绘制正常大小的矩形。

+10

请注意,这会导致几乎两次绘制相同的区域 –

100

尝试油漆。 setStyle(Paint.Style。FILL)和油漆。 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

是否还有一种方法可以为canvas.drawRoundRect()执行此操作?因为在我的情况下,边框现在已经圆角,即使我用canvas.drawRoundRect()也绘制了它。 – Chris

+3

我知道答案是旧的,但我想分享这个小线路paint.setPathEffect(新的CornerPathEffect(radius));回答Chris的问题。 我只是回答,因为可能有人需要帮助。 – Crash

6

如果您正在绘制多个视图,那么您也可以使用两种颜料,一种用于笔画,另一种用于填充。这样你不必重置它们。

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 
}