Android холст рисовать прямоугольник - PullRequest
98 голосов
/ 08 сентября 2011

как нарисовать пустой прямоугольник и т. Д. Какую функцию в 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);

Он рисует прямоугольник и заливает его черным цветом, но я хочу просто вокруг нравится это изображение:

enter image description here

Ответы [ 7 ]

147 голосов
/ 22 декабря 2011

Попробуйте paint.setStyle(Paint.Style.STROKE)?

119 голосов
/ 08 сентября 2011

Предполагая, что " часть внутри прямоугольника не имеет цвета содержимого " означает, что вы хотите различные заливки внутри прямоугольника;вам нужно нарисовать прямоугольник внутри вашего прямоугольника с шириной обводки 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);

    }
}

... получится так:

enter image description here

11 голосов
/ 25 сентября 2012
//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 голосов
/ 25 мая 2015

Создать новый класс 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(), используя наш пользовательский View, MyView.Call таким образом.

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

Для получения более подробной информации вы можете посетить здесь

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

6 голосов
/ 08 сентября 2011
paint.setStrokeWidth(3);

paint.setColor(BLACK);

и любой из ваших drawRect должен работать.

0 голосов
/ 08 сентября 2018

Код в порядке, просто установите стиль краски как STROKE

paint.setStyle(Paint.Style.STROKE);
0 голосов
/ 14 января 2014

Не знаю, не слишком ли поздно, но я решил это нарисовать четыре тонких прямоугольника, которые вместе составляли одну большую границу. Рисование границы одним прямоугольником кажется невозможным, поскольку все они непрозрачные, поэтому каждый край границы следует рисовать отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...