安卓画布绘制矩形

116

如何使用Canvas绘制无内容或颜色的空边框矩形,边框宽度为3,颜色为黑色?应该使用Canvas中的哪个函数?

void drawRect(float left, float top, float right, float bottom, Paint paint)

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

谢谢。

我尝试了这个示例。

Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(0, 0, 0));
myPaint.setStrokeWidth(10);
c.drawRect(100, 100, 200, 200, myPaint);

它绘制了一个黑色填充的矩形,但我只想要一个“边框”,就像这张图片一样:

输入图片描述

7个回答

170

尝试使用 paint.setStyle(Paint.Style.STROKE) 吗?


129
假设"矩形内部没有内容颜色"意味着你想在矩形中使用不同的填充颜色;那么你需要在矩形内部绘制一个具有所需填充颜色的边框宽度为0的矩形。

例如:

DrawView.java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawView extends View {
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);            
    }

    @Override
    public void onDraw(Canvas canvas) {
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(30, 30, 80, 80, paint);
        paint.setStrokeWidth(0);
        paint.setColor(Color.CYAN);
        canvas.drawRect(33, 60, 77, 77, paint );
        paint.setColor(Color.YELLOW);
        canvas.drawRect(33, 33, 77, 60, paint );

    }

}

启动它的活动:

StartDraw.java

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

public class StartDraw extends Activity {
    DrawView drawView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        drawView = new DrawView(this);
        drawView.setBackgroundColor(Color.WHITE);
        setContentView(drawView);

    }
}

...将会变成这个样子:

在此输入图片描述


1
实际上这就是我需要的screencast.com/t/oFYF5kGtw5B,我想在绘制所有内容后添加那个红色矩形,这可能吗? - Kec
21
这是解决方案 paint.setStyle(Style.STROKE);谢谢帮助。 - Kec
我认为DonGru和Juan在这里给出了很好的解释.. 但是对于作者所要求的确切一行答案,@Yuck已经提供了以下内容 - paint.setStyle(Paint.Style.STROKE) - alchemist
这个答案与问题不符,它没有展示正确的答案。Pandur的回答才是正确的。 - Sonhja

13
//white background
canvas.drawRGB(255, 255, 255);
//border's properties
paint.setColor(Color.BLACK);
paint.setStrokeWidth(0);        
paint.setStyle(Paint.Style.STROKE);         
canvas.drawRect(100, 100, 200, 200, paint);

10
创建一个新类MyView,该类扩展自View。重写onDraw(Canvas canvas)方法,在Canvas上绘制矩形。
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {

 Paint paint;
 Path path;

 public MyView(Context context) {
  super(context);
  init();
 }

 public MyView(Context context, AttributeSet attrs) {
  super(context, attrs);
  init();
 }

 public MyView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  init();
 }

 private void init(){
  paint = new Paint();
  paint.setColor(Color.BLUE);
  paint.setStrokeWidth(10);
  paint.setStyle(Paint.Style.STROKE);

 }

 @Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  super.onDraw(canvas);

  canvas.drawRect(30, 50, 200, 350, paint);
  canvas.drawRect(100, 100, 300, 400, paint);
  //drawRect(left, top, right, bottom, paint)

 }

}

使用我们自定义的视图MyView,将您的Java活动移动到setContentView()。用这种方式调用。

    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(new MyView(this));
  }

更多详情请访问这里

http://developer.android.com/reference/android/graphics/Canvas.html


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

你的drawRect中的任意一个都应该起作用。


2
代码没有问题,只需将paint的setStyle设置为STROKE。
paint.setStyle(Paint.Style.STROKE);

-1

不知道是否已经太晚了,但我解决这个问题的方法是绘制四个细长的矩形,它们共同组成了一个大边框。用一个矩形绘制边框似乎是不可行的,因为它们都是不透明的,所以你应该分别绘制边框的每条边。


或者两个矩形,一个在另一个内部 :) - P-RAD
或者是一个圆,圆的背景颜色,三段的 drawLines() 和一个矩形,用于第四条线。 - Tatarize

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接