Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Drawing a filled rectangle with a border in android

Is there any way in Android to draw a filled rectangle with say a black border. My problem is that the canvas.draw() takes one paint object, and to my knowledge the paint object can't have a different color for the fill and the stroke. Is there a way around this?

like image 455
Uwais Iqbal Avatar asked Nov 24 '12 21:11

Uwais Iqbal


2 Answers

Try paint.setStyle(Paint.Style.FILL) and paint.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); } 
like image 156
wannik Avatar answered Sep 20 '22 14:09

wannik


If you are drawing multiple views then you could also use two paints, one for the stroke and one for the fill. That way you don't have to keep resetting them.

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 } 
like image 41
Suragch Avatar answered Sep 18 '22 14:09

Suragch