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
Odpowiedz
Narysujesz prostokąt z kolorem obramowania i rozmiarem prostokąta plus obramowanie, zmieniasz kolor farby i rysujesz ponownie prostokąt o normalnym rozmiarze.
Należy zauważyć, że powoduje to prawie dwukrotne rysowanie tego samego obszaru. –
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);
}
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
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
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ć.
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
}
Masz rację. Po prostu narysuj najpierw wypełniony prostokąt, a potem obrys dookoła. – Gene