Rectángulo de dibujo de lienzo de Android

105

cómo dibujar un rectángulo vacío con etc. borderWidth = 3 y borderColor = black y la parte dentro del rectángulo no tiene contenido ni color. Qué función en Canvas usar

void drawRect(float left, float top, float right, float bottom, Paint paint)

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

Gracias.

Intento este ejemplo

Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(0, 0, 0));
myPaint.setStrokeWidth(10);
c.drawRect(100, 100, 200, 200, myPaint);

Dibuja un rectángulo y lo rellena con color negro, pero solo quiero un "marco" como esta imagen:

ingrese la descripción de la imagen aquí

Kec
fuente

Respuestas:

158

Intenta paint.setStyle(Paint.Style.STROKE)?

pandur
fuente
124

Suponiendo que "la parte dentro del rectángulo no tiene color de contenido " significa que desea diferentes rellenos dentro del rectángulo; debe dibujar un rectángulo dentro de su rectángulo, luego con un ancho de trazo 0 y los colores de relleno deseados.

Por ejemplo:

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

    }

}

La actividad para iniciarlo:

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

    }
}

... resultará de esta manera:

ingrese la descripción de la imagen aquí

DonGru
fuente
En realidad, esto es lo que necesito screencast.com/t/oFYF5kGtw5B ese rectángulo rojo después de dibujar todo solo para agregar ese rectángulo, ¿es posible?
Kec
21
Esta es la solución paint.setStyle (Style.STROKE); Gracias por la ayuda.
Kec
Creo que DonGru y Juan dieron una gran explicación aquí ... pero la respuesta exacta de una línea a lo que pide el autor ha sido proporcionada a continuación por @Yuck - paint.setStyle (Paint.Style.STROKE)
alquimista
Esta respuesta no encaja con la respuesta. No muestra la respuesta actual. La respuesta de Pandur es la correcta.
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);
Cristopher Loli
fuente
7

Crea una nueva clase MyView, Which extends View. Anula el onDraw(Canvas canvas)método para dibujar el rectángulo 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)

 }

}

Luego, mueva su actividad de Java al setContentView()uso de nuestra Vista personalizada, MyView. Llame de esta manera.

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

Para más detalles puedes visitar aquí.

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

IntelliJ Amiya
fuente
6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

y cualquiera de los tuyos drawRectdebería funcionar.

Kenny Lim
fuente
0

No sé si es demasiado tarde, pero la forma en que resolví esto fue dibujando cuatro rectángulos delgados que juntos formaron un borde grande. Dibujar el borde con un rectángulo parece que se puede deshacer, ya que todos son opacos, por lo que debe dibujar cada borde del borde por separado.

Steven
fuente
O dos rectángulos uno dentro del otro :)
P-RAD
O un círculo, un círculo del color de fondo, un drawLines () de tres segmentos y un rectángulo, para la cuarta línea.
Tatarizar
0

El código está bien, solo establece el estilo de pintura como CARRERA

paint.setStyle(Paint.Style.STROKE);
usuario3013823
fuente