Android холст рисует прямоугольник

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

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

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


person Kec    schedule 08.09.2011    source источник


Ответы (6)


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

person pandur    schedule 22.12.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);

    }
}

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

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

person DonGru    schedule 08.09.2011
comment
На самом деле это то, что мне нужно screencast.com/t/oFYF5kGtw5B этот красный прямоугольник после того, как я нарисую все, чтобы добавить этот прямоугольник, это возможно? - person Kec; 08.09.2011
comment
Это решение paint.setStyle(Style.STROKE); Спасибо за помощь. - person Kec; 08.09.2011
comment
Я думаю, что ДонГру и Хуан дали здесь отличное объяснение ... но точный однострочный ответ на то, о чем просит автор, был предоставлен ниже @Yuck -- paint.setStyle(Paint.Style.STROKE) - person alchemist; 04.07.2013
comment
Этот ответ не соответствует ответу. Он не показывает правильный ответ. Ответ Пандура правильный. - person Sonhja; 18.12.2013

Создайте новый класс 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.Call таким образом.

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

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

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

person IntelliJ Amiya    schedule 25.05.2015

paint.setStrokeWidth(3);

paint.setColor(BLACK);

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

person Kenny Lim    schedule 08.09.2011

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

paint.setStyle(Paint.Style.STROKE);
person user3013823    schedule 08.09.2018

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

person Steven    schedule 14.01.2014
comment
Или два прямоугольника один внутри другого :) - person P-RAD; 11.09.2015
comment
Или круг, круг фонового цвета, трехсегментный drawLines() и прямоугольник для четвертой строки. - person Tatarize; 19.09.2015