Retângulo de desenho de tela Android

104

como desenhar um retângulo vazio com etc. borderWidth = 3 e borderColor = black e parte dentro do retângulo não têm conteúdo ou cor. Qual função no 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)

Obrigado.

Eu tento este exemplo

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

Ele desenha um retângulo e o preenche com a cor preta, mas eu quero apenas "enquadrar" como esta imagem:

insira a descrição da imagem aqui

Kec
fonte

Respostas:

158

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

Pandur
fonte
124

Presumindo que " parte dentro do retângulo não tem cor de conteúdo " significa que você deseja diferentes preenchimentos dentro do retângulo; você precisa desenhar um retângulo dentro de seu retângulo, com largura de traço 0 e as cores de preenchimento desejadas.

Por exemplo:

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

    }

}

A atividade para iniciá-lo:

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

    }
}

... ficará assim:

insira a descrição da imagem aqui

DonGru
fonte
Na verdade, é disso que preciso: screencast.com/t/oFYF5kGtw5B aquele retângulo vermelho depois de desenhar tudo apenas para adicionar aquele retângulo, é possível?
Kec,
21
Esta é a solução paint.setStyle (Style.STROKE); Obrigado pela ajuda.
Kec,
Acho que DonGru e Juan deram uma grande explicação aqui .. mas a resposta exata de uma linha ao que o autor está pedindo foi fornecida abaixo por @Yuck - paint.setStyle (Paint.Style.STROKE)
alquimista
Esta resposta não combina com a resposta. Não mostra a resposta correta. A resposta de Pandur é a correta.
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
fonte
7

Crie uma nova classe MyView, Which extends View. Substitua o onDraw(Canvas canvas)método para desenhar o retâ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)

 }

}

Em seguida, mova sua atividade Java para setContentView()usar nossa visualização personalizada, MyView.Call desta forma.

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

Para mais detalhes você pode visitar aqui

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

IntelliJ Amiya
fonte
6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

e qualquer um de seus drawRectdeve funcionar.

Kenny Lim
fonte
0

Não sei se já é tarde demais, mas a maneira que resolvi foi desenhando quatro retângulos finos que juntos formavam uma borda grande. Desenhar a borda com um retângulo parece ser reversível, pois eles são todos opacos, então você deve desenhar cada borda da borda separadamente.

Steven
fonte
Ou dois retângulos um dentro do outro :)
P-RAD
Ou um círculo, um círculo da cor de fundo, três drawLines segmentados () e um retângulo, para a quarta linha.
Tatarize
0

O código é bom, basta definir o estilo de tinta como STROKE

paint.setStyle(Paint.Style.STROKE);
user3013823
fonte