【问题标题】:Drawing a filled rectangle with a border in android在android中绘制一个带边框的填充矩形
【发布时间】:2012-11-12 19:19:07
【问题描述】:

在 Android 中有什么方法可以绘制一个带有黑色边框的填充矩形。我的问题是 canvas.draw() 需要一个绘画对象,据我所知,绘画对象不能为填充和描边使用不同的颜色。有没有办法解决这个问题?

【问题讨论】:

  • 你是对的。只需先绘制填充的矩形,然后在外部绘制笔划。

标签: android border android-canvas paint fill


【解决方案1】:

你用边框的颜色和矩形加上边框的大小绘制一个矩形,你改变油漆的颜色并再次用正常大小绘制矩形。

【讨论】:

  • 请注意,这会导致在同一区域绘制几乎两次
【解决方案2】:

尝试绘画。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);
}

【讨论】:

  • 还有没有办法为canvas.drawRoundRect()做到这一点?因为在我的例子中,边框现在有圆角,即使我也用 canvas.drawRoundRect() 绘制它。
  • 我知道答案是旧的,但我想分享这条小线paint.setPathEffect(new CornerPathEffect(radius));回答克里斯的问题。我只是回答,因为可能有人需要帮助。
  • @Crash 最好使用drawRoundRect 作为动态半径(基于矩形大小)
【解决方案3】:

如果您要绘制多个视图,那么您还可以使用两种颜料,一种用于描边,一种用于填充。这样您就不必一直重置它们。

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
}

【讨论】:

    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多