Прямоугольник рисования холста Android

105

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

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

введите описание изображения здесь

Kec
источник

Ответы:

158

Попробовать paint.setStyle(Paint.Style.STROKE)?

пандур
источник
125

Предположение, что « часть прямоугольника не имеет цвета содержимого » означает, что вам нужны разные заливки внутри прямоугольника; вам нужно нарисовать прямоугольник внутри вашего прямоугольника, затем с шириной обводки 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 и Хуан дал большое объяснение здесь .. но точно на одну строку ответа на то , что автор просит была представлена ниже по @Yuck - paint.setStyle (Paint.Style.STROKE)
алхимик
Этот ответ не соответствует ответу. Он не показывает правильного ответа. Ответ Пандура правильный.
Sonhja
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

IntelliJ Amiya
источник
6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

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

Кенни Лим
источник
0

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

Стивен
источник
Или два прямоугольника один внутри другого :)
P-RAD
Или круг, круг цвета фона, трехсегментный drawLines () и прямоугольник для четвертой линии.
Tatarize
0

Код в порядке, просто установите Стиль рисования как ИНДИКАТОР

paint.setStyle(Paint.Style.STROKE);
user3013823
источник