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
}
- 1. Rysowanie wypełnionego półkola
- 2. Rysowanie prostokąta w UIView
- 3. Jak narysować tekst z obramowaniem na MapView w systemie Android?
- 4. Rysowanie prostokąta z Direct X
- 5. Rysowanie obróconego prostokąta
- 6. Rysowanie prostokąta prostokątnego OpenGL
- 7. Swift 3: Rysowanie prostokąta
- 8. Rysowanie prostokąta na wierzchu AVCaptureVideoPreviewLayer, możliwe?
- 9. C# rysowanie prostokąta na obrazku?
- 10. Rysowanie prostokąta na obrazku - jak ograniczyć obszar prostokąta?
- 11. Rysowanie prostokąta za pomocą gestu przesuwania
- 12. Jak utworzyć prostokąt z obramowaniem?
- 13. Rysowanie prostokąta z przerywanymi liniami przy użyciu Rafael.js
- 14. Rysowanie prostokąta o zaledwie 2 rogi zaokrąglone w Qt
- 15. Całkowita szerokość elementu (łącznie z obramowaniem i obramowaniem) w jQuery
- 16. Rysowanie kształtów w systemie Android MapView niezależnie od poziomu powiększenia
- 17. Tekst z gradientem w systemie Android
- 18. Rysowanie łuku za pomocą SweepGradient w systemie Android
- 19. Rysowanie prostokąta wokół wykrytego obiektu przy użyciu SURF
- 20. Pytanie dla początkujących użytkowników: rysowanie prostokąta. Co ja robię źle?
- 21. Android - rysowanie na płótnie PDF z WebView
- 22. Ripples z obramowaniem dla TextView?
- 23. Czysta dymka CSS z obramowaniem
- 24. Android OpenCV: rysowanie zapałek z feature2d
- 25. Android: Rysowanie przycisku jako pokrętła
- 26. Android: Rysowanie kanwy do ImageView
- 27. Android - rysowanie z akceleracją sprzętową i antyaliasingiem powoduje powstawanie artefaktów
- 28. Jak utworzyć utytułowaną granicę w systemie Android?
- 29. Jak uzyskać rysowanie z przycisku?
- 30. oddzwonienie w systemie Android?
Masz rację. Po prostu narysuj najpierw wypełniony prostokąt, a potem obrys dookoła. – Gene