Prostokąt do rysowania kanwy systemu Android

105

jak narysować pusty prostokąt za pomocą itp. borderWidth = 3 i borderColor = black, a część w prostokącie nie ma treści ani koloru. Której funkcji w Canvas użyć

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

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

Dzięki.

Próbuję tego przykładu

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

Rysuje prostokąt i wypełnia go czarnym kolorem, ale chcę tylko „obramować” wokół, jak na tym obrazku:

wprowadź opis obrazu tutaj

Kec
źródło

Odpowiedzi:

158

Spróbuj paint.setStyle(Paint.Style.STROKE)?

pandur
źródło
125

Zakładając, że „ część w prostokącie nie ma koloru zawartości ” oznacza, że ​​chcesz mieć różne wypełnienia w prostokącie; musisz narysować prostokąt w swoim prostokącie, a następnie z szerokością obrysu 0 i żądanymi kolorami wypełnienia.

Na przykład:

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

    }

}

Czynność, aby ją rozpocząć:

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

    }
}

... okaże się w ten sposób:

wprowadź opis obrazu tutaj

DonGru
źródło
Właściwie to jest to, czego potrzebuję screencast.com/t/oFYF5kGtw5B tego czerwonego prostokąta po narysowaniu wszystkiego tylko po to, aby dodać ten prostokąt, czy to możliwe?
Kec,
21
To jest rozwiązanie paint.setStyle (Style.STROKE); Dzięki za pomoc.
Kec,
Myślę, że DonGru i Juan podali tutaj świetne wyjaśnienie ... ale dokładną jedną linijkę odpowiedzi na pytanie, o co prosi autor, udzielił poniżej @Yuck - paint.setStyle (Paint.Style.STROKE)
alchemik
Ta odpowiedź nie pasuje do odpowiedzi. Nie pokazuje aktualnej odpowiedzi. Odpowiedź Pandura jest prawidłowa.
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
źródło
7

Utwórz nową klasę MyView, Which extends View. Zastąp onDraw(Canvas canvas)metodę rysowania prostokąta 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)

 }

}

Następnie przenieś swoją aktywność w Javie do setContentView()korzystania z naszego niestandardowego widoku MyView.

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

Więcej informacji można znaleźć tutaj

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

IntelliJ Amiya
źródło
6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

i któryś z twoich drawRectpowinien działać.

Kenny Lim
źródło
0

Nie wiem, czy jest za późno, ale sposobem, w jaki to rozwiązałem, było narysowanie czterech cienkich prostokątów, które razem tworzyły jedną dużą ramkę. Rysowanie obramowania za pomocą jednego prostokąta wydaje się być cofnięte, ponieważ wszystkie są nieprzezroczyste, więc każdą krawędź obramowania należy narysować osobno.

Steven
źródło
Albo dwa prostokąty jeden w drugim :)
P-RAD
Lub okrąg, okrąg w kolorze tła, trójdzielny drawLines () i prostokąt dla czwartej linii.
Tatarize
0

Kod jest w porządku, po prostu ustaw styl farby na STROKE

paint.setStyle(Paint.Style.STROKE);
user3013823
źródło