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

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

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


Ответы:



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



0

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


Или два прямоугольника один внутри другого :)
P-RAD

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

0

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

paint.setStyle(Paint.Style.STROKE);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.