2012-11-24 14 views
29

Czy w systemie Android można narysować wypełniony prostokąt za pomocą czarnej granicy. Mój problem polega na tym, że canvas.draw() przyjmuje jeden obiekt malarski i według mojej wiedzy obiekt farby nie może mieć innego koloru dla wypełnienia i obrysu. Czy istnieje sposób obejścia tego?Rysowanie wypełnionego prostokąta z obramowaniem w systemie Android

+0

Masz rację. Po prostu narysuj najpierw wypełniony prostokąt, a potem obrys dookoła. – Gene

Odpowiedz

2

Narysujesz prostokąt z kolorem obramowania i rozmiarem prostokąta plus obramowanie, zmieniasz kolor farby i rysujesz ponownie prostokąt o normalnym rozmiarze.

+10

Należy zauważyć, że powoduje to prawie dwukrotne rysowanie tego samego obszaru. –

100

Spróbuj malować. setStyle (Paint.Style. FILL) i malować. setStyle (Paint.Style. STROKE).

Paint paint = new Paint(); 
Rect r = new Rect(10, 10, 200, 100); 

@Override 
public void onDraw(Canvas canvas) { 
    // fill 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.MAGENTA); 
    canvas.drawRect(r, paint); 

    // border 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setColor(Color.BLACK); 
    canvas.drawRect(r, paint); 
} 
+0

Czy istnieje również sposób na zrobienie tego dla canvas.drawRoundRect()? Ponieważ w moim przypadku obramowanie ma zaokrąglone rogi, mimo że rysuję je również za pomocą canvas.drawRoundRect(). – Chris

+3

Wiem, że odpowiedź jest stara, ale chcę podzielić się tą małą linią paint.setPathEffect (new CornerPathEffect (radius)); odpowiedzieć na pytanie Chrisa. Po prostu odpowiadam, bo może ktoś potrzebuje pomocy. – Crash

6

Jeśli rysujesz wiele widoków, możesz również użyć dwóch farb, jednej do obrysu i jednej do wypełnienia. W ten sposób nie musisz ich resetować.

enter image description here

Paint fillPaint = new Paint(); 
Paint strokePaint = new Paint(); 

RectF r = new RectF(30, 30, 1000, 500); 

void initPaints() { 

    // fill 
    fillPaint.setStyle(Paint.Style.FILL); 
    fillPaint.setColor(Color.YELLOW); 

    // stroke 
    strokePaint.setStyle(Paint.Style.STROKE); 
    strokePaint.setColor(Color.BLACK); 
    strokePaint.setStrokeWidth(10); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    // First rectangle 
    canvas.drawRect(r, fillPaint); // fill 
    canvas.drawRect(r, strokePaint); // stroke 

    canvas.translate(0, 600); 

    // Second rectangle 
    int cornerRadius = 50; 
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, fillPaint); // fill 
    canvas.drawRoundRect(r, cornerRadius, cornerRadius, strokePaint); // stroke 
} 
Powiązane problemy