Android полотно малювати прямокутник


104

як намалювати порожній прямокутник з т. д. borderWidth = 3 та borderColor = чорний і частина прямокутника не мають вмісту чи кольору. Яку функцію в Canvas використовувати

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

void drawRect(RectF rect, Paint paint)

void drawRect(Rect r, Paint paint)

Дякую.

Я пробую цей приклад

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

Він малює прямокутник і заповнює його чорним кольором, але я хочу просто "обрамляти" навколо, як це зображення:

введіть тут опис зображення


Відповіді:



124

Якщо припустити, що " частина в прямокутнику не має кольору вмісту " означає, що вам потрібні різні заливки у прямокутнику; вам потрібно намалювати прямокутник у прямокутнику, а потім шириною обведення 0 та потрібним кольором заливки.

Наприклад:

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

    }

}

Діяльність для його початку:

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

    }
}

... вийде так:

введіть тут опис зображення


Насправді це те, що мені потрібно screencast.com/t/oFYF5kGtw5B, що червоний прямокутник після того, як я намалюю все, щоб додати цей прямокутник, чи це можливо?
Kec

21
Це рішення paint.setStyle (Style.STROKE); Дякуємо за допомогу.
Kec

Я думаю, що Донгру та Хуан дали тут чудове пояснення .. але точну відповідь на один рядок на те, про що просить автор, було надано нижче @Yuck - paint.setStyle (Paint.Style.STROKE)
алхімік

Ця відповідь не відповідає відповіді. Це не показує коректної відповіді. Відповідь Пандура правильна.
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);

7

Створіть новий клас MyView, Which extends View. Замініть onDraw(Canvas canvas)метод малювання прямокутника 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)

 }

}

Потім перемістіть свою діяльність на Java, setContentView()використовуючи наш власний перегляд MyView.Call таким чином.

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

Більш детальну інформацію ви можете відвідати тут

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



0

Не знаю, чи це занадто пізно, але я вирішив це, щоб намалювати чотири тонкі прямокутники, які разом складали один великий кордон. Намалювання рамки одним прямокутником здається невідмінним, оскільки всі вони непрозорі, тому слід намалювати кожен край межі окремо.


Або два прямокутники один всередині іншого :)
P-RAD

Або коло, коло кольору фону, три сегментовані лінії () і прямокутник для четвертого рядка.
Tatarize

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.