2017-10-24 6 views
1

직사각형을 그려야하는 사용자 정의보기를 만들어야합니다. canvas.drawRect 메소드를 사용하려고합니다. 이처럼 사각형을 만들고 싶습니다. enter image description herecanvas.drawRect가 사각형을 그리는 방법

회색 색은 View 클래스를 확장하는 내 사용자 정의보기입니다. onDraw 메서드 내에서 사각형을 그리려고합니다.

하지만 실제로는 drawRect 메서드의 매개 변수와 혼동합니다. I 가정 어떤 문서

/** 
* Draw the specified Rect using the specified paint. The rectangle will 
* be filled or framed based on the Style in the paint. 
* 
* @param left The left side of the rectangle to be drawn 
* @param top The top side of the rectangle to be drawn 
* @param right The right side of the rectangle to be drawn 
* @param bottom The bottom side of the rectangle to be drawn 
* @param paint The paint used to draw the rect 
*/ 

으로 당

좌측 및 상단 형태는 X, 시작점의 Y 좌표, 우측의 폭과 하단의 높이이다. 그러나 그런 식으로 작동하지 않는 것 같습니다.

나는 하나 개의 사각형을 그립니다 이런 식으로 뭔가를 시도하지만

 paint.setColor(Color.BLUE); 
     canvas.drawRect(5, canvas.getHeight()/2, 30, 30, paint); 

사람이 사각형이 값을 사용하여 그려진 방법을 정확하게 알려 주시기 바랍니다 수있는 일을 그릴하지 않는 이유는 무엇입니까?

누군가가 최소한 첫 번째 사각형을 그리는 코드를 보여줄 수 있다면 매우 유용 할 것입니다.

필자의 요구 사항은 내부 사각형의 수가 동적이기 때문에이 뷰에 4를 전달하면 4 개의 동일한 너비의 사각형이 수평으로 만들어야합니다. something like enter image description here

미리 감사드립니다 !!

답변

3

그러나 실제로 나는의 drawRect 메서드의 매개 변수와 혼란 스러워요.

drawRect 메서드는 직사각형을 그리려면 두 개의 좌표 만 있으면됩니다. 왼쪽 상단 구석과 오른쪽 하단 구석. 따라서 4 점은 캔버스에이 두 좌표 을 형성합니다. 이 P1 및 P2는 (좌측 상부) 및 (바로 아래), 따라서 그려진 사각형으로 형성되는 점은 다음과 같이 될 것이다 된 아래의 이미지

enter image description here

로부터 명백한 낸다.

enter image description here

onDraw 방법

@Override 
    protected void onDraw(Canvas canvas) { 
    int padding = 5; 
    float rectangleWidth = (getMeasuredWidth() - padding * 2)/colors.length; 
    for (int i = 0; i < colors.length; i++) { 
     paint.setColor(colors[i]); 
     canvas.drawRect(padding + (rectangleWidth * i), getMeasuredHeight()/2, padding + rectangleWidth * (i + 1), getMeasuredHeight() - padding, paint); // 5 px is the padding given to the canvas 
    } 
    } 
2
drawRect(float left, float top, float right, float bottom, Paint paint) 

문제가 보다 작은 경우 또는 바닥 다음 사각형이 그려지지 않습니다 미만 최고입니다 남아 있다는 것입니다 귀하의 경우 보인다. @David Medenjak이 (가) 일부 장치에서만 발생하는 것 같습니다.

캔버스 치수가 아닌 getWidth() & 캔버스를 사용하는 것이 더 좋으며 Canvas 크기가 아닌 View 차원을 사용하는 것이 좋습니다. getWidth() & Canvas.getHeight()

+0

작은 또한 당신이 당신의 이미지를 보여처럼 동적으로 사각형을 그릴 당신이

int[] colors = new int[]{Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; // given some fixed colors 

같은 것을 시도하려면 _if 권리 미만 왼쪽 또는 아래가 위쪽보다 작 으면 직사각형이 그려지지 않습니다 ** 일부 장치 ** :/ –

+0

getWidth – Jrd

+0

** 왼쪽과 위쪽은 시작점의 x, y 좌표를 나타내며 오른쪽은 너비이고 bottom은 높이입니다. ** ** 올바른 값입니다. ? – Jrd