Android 캔버스 그리기 직사각형


104

등을 사용하여 빈 사각형을 그리는 방법 borderWidth = 3 및 borderColor = black 및 사각형 내의 부분에는 내용이나 색상이 없습니다. 캔버스에서 사용할 기능

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

사각형을 그리고 검은 색으로 채우지 만이 이미지와 같이 "프레임"을 원합니다.

여기에 이미지 설명 입력


답변:


157

시도 paint.setStyle(Paint.Style.STROKE)하시겠습니까?


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 2011 년

21
이것이 해결책입니다. paint.setStyle (Style.STROKE); 도와 줘서 고마워.
Kec

나는 DonGru와 후안 여기 좋은 설명 ..하지만에 대한 정확한 하나의 라인 대답을했다 생각하는 저자는 @Yuck 아래 제공되었습니다 요구한다 - paint.setStyle (Paint.Style.STROKE)
연금술사

이 대답은 대답과 맞지 않습니다. 그것은 corrent 대답을 보여주지 않습니다. Pandur의 대답이 정답입니다.
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)

 }

}

그런 다음 setContentView()사용자 정의보기 인 MyView 를 사용 하여 Java 활동을 이동하십시오 .

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

자세한 내용은 여기를 참조하세요.

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


6
paint.setStrokeWidth(3);

paint.setColor(BLACK);

둘 중 하나 drawRect가 작동합니다.


0

이것이 너무 늦었는지 모르겠지만, 제가 해결 한 방법은 하나의 큰 테두리를 구성하는 네 개의 얇은 직사각형을 그리는 것이 었습니다. 하나의 사각형으로 테두리를 그리는 것은 모두 불투명하기 때문에 취소 할 수없는 것처럼 보이므로 테두리의 각 가장자리를 개별적으로 그려야합니다.


또는 두 개의 직사각형이 다른 내부에 있습니다 :)
P-RAD

또는 원, 배경색의 원, 세 개의 세그먼트 drawLines () 및 사각형, 네 번째 줄.
Tatarize

0

코드는 STROKE로 페인트의 setStyle 만 괜찮습니다.

paint.setStyle(Paint.Style.STROKE);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.