Android画布绘制矩形


104

如何绘制带有等的空矩形。borderWidth = 3和borderColor = black,矩形内的部分没有内容或颜色。在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);

它绘制矩形并用黑色填充它,但我只想像这样的图像周围“框架”:

在此处输入图片说明


Answers:



124

假设“ 矩形内的部分没有内容颜色 ”表示您要在矩形内进行不同的填充;您需要在矩形内绘制一个矩形,然后使用笔触宽度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);

    }
}

...结果将是这样的:

在此处输入图片说明


其实这就是我需要的screencast.com/t/oFYF5kGtw5B,在我全部绘制完之后添加红色矩形就是可能的吗?
Kec

21
这是解决方案paint.setStyle(Style.STROKE); 感谢帮助。
Kec

我认为DonGru和Juan在这里给出了很好的解释。.但是,作者要求的确切答案已经由@Yuck在下面提供-paint.setStyle(Paint.Style.STROKE)
炼金术士

该答案与答案不符。它没有显示正确的答案。潘杜尔的答案是正确的。
Sonhja 2013年

12
//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);

7

创建一个新的类MyView, Which extends 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)

 }

}

然后将Java活动移至setContentView()使用我们的自定义视图MyView。以这种方式调用。

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

欲了解更多详情,请访问这里

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



0

不知道这是否为时已晚,但是我解决此问题的方法是绘制四个细矩形,它们一起组成一个大边框。用一个矩形绘制边框似乎是不可撤消的,因为它们都是不透明的,因此您应该分别绘制边框的每个边缘。


或两个矩形一个在另一个内部:)
P-RAD

或为第四行使用一个圆圈,一个背景颜色的圆圈,一个三段式的drawLines()和一个矩形。
2015年

0

只需将paint的setStyle设置为STROKE,代码就可以了

paint.setStyle(Paint.Style.STROKE);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.