안녕하세요? 닉네임 간편입니다. 이번 시간에는 Rect 클래스에 대해 알아보겠습니다.
1. Rect 클래스란
Rect 클래스는 간단하게 사각형을 만드는 클래스라고 보면 됩니다. Rect 클래스는 사각형 자체를 그리거나 사각형에 해당하는 범위를 지정하여 해당 부분만 화면을 갱신할 때 사용합니다.(그러나 해당 기능을 수행하는 invalidate(Rect rect) 메소드가 API 28 이후 depreciated 되었습니다. 따라서 해당 기능은 앞으로는 더는 사용하지 않는 것이 좋겠습니다)
Rect 클래스는 4개의 가장자리(left, top, right, bottom)로 구성됩니다.
쉽게 말해 상하좌우 기준을 바탕으로 사각형을 만든다고 보시면 됩니다. 이는 Rect 객체를 생성하는 함수를 통해 더 자세히 설명하겠습니다.
public Rect (int left, int top, int right, int bottom)
각 파라미터는 다음과 같습니다.
left: 사각형의 왼쪽 기준이 되는 x좌표
top: 사각형의 위쪽 기준이 되는 y좌표
right: 사각형의 오른쪽 기준이 되는 x좌표
bottom: 사각형의 아래쪽 기준이 되는 y좌표
이때 사각형의 범위는 4개의 기준을 바탕으로 형성되고, 해당 범위가 곧 사각형이 됩니다.
즉, left에 해당하는 값부터 right에 해당하는 값까지 사각형의 좌우 범위가 설정되고, top에 해당하는 값부터 bottom에 해당하는 값까지 사각형의 상하 범위가 설정되는 것입니다. 그리고 이러한 상하좌우 범위를 종합해 사각형의 범위가 설정되고, 사각형이 그려지게 됩니다.
2. 예시를 통한 설명
예시를 통해 더욱 쉽게 설명하겠습니다.
Rect rect = new Rect(100, 100, 1000, 1000);
현재 Rect(100, 100, 1000, 1000) 객체를 생성하였습니다.
즉, 이 사각형의 좌우 범위는 100부터 1000까지이고, 상하 범위는 100부터 1000까지입니다.
(수식으로 표현하면 100 ≤ x ≤ 1000, 100 ≤ y ≤ 1000 입니다)
이러한 사각형 객체를 화면에 그리면 다음과 같은 결과가 나옵니다.
액티비티 소스 코드입니다.
<MainActivity.java>
package com.mybest.viewtest;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CustomView view = new CustomView(this); // 커스텀 뷰 객체 생성하고
setContentView(view); // 화면 설정
}
// 내부 클래스
class CustomView extends View { // View 클래스 상속
public CustomView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint mPaint = new Paint(); // 페인트 객체 생성
mPaint.setColor(Color.MAGENTA); // 파란색 설정
mPaint.setStyle(Paint.Style.FILL); // 스타일은 FILL 로 설정(채우기만 하고 외곽선 X)
// Rect 객체 생성
Rect rect = new Rect(100,100,1000,1000);
canvas.drawRect(rect, mPaint); // 캔버스에 그리기
}
}
}
이를 좀 더 자세히 그림으로 설명하겠습니다.
앞서 설명했듯이 이 사각형 객체의 범위는 100 ≤ x ≤ 1000, 100 ≤ y ≤ 1000입니다.
안드로이드는 왼쪽부터 x 좌표가 시작하고, 위쪽부터 y 좌표가 시작합니다. 즉, x 좌표는 왼쪽부터 오른쪽으로 가면서 값이 증가하고, y 좌표는 위쪽부터 아래쪽으로 갈수록 값이 증가합니다. 따라서 앞서 만들었던 사각형 객체를 좌표로 표시하면 위의 그림처럼 표시됩니다.
그림을 통해 알 수 있듯이 이 사각형 객체의 좌우 범위는 100부터 1000까지이고, 상하 범위는 100부터 1000까지인 것을 확인할 수 있습니다. 그리고 이 범위들을 종합해 사각형 객체의 범위가 설정되고, 이를 화면에 그릴 수 있습니다.
그런데 이때 주의해야 할 사항이 하나 있습니다.
Rect 객체는 x, y 좌표를 기준으로 사각형을 설정하기 때문에, 각 범위에 대한 파라미터를 전달할 때 left는 right보다 값이 작아야 하고 top은 bottom보다 값이 작아야 사각형을 그릴 수 있습니다.
그런데 Rect 객체를 만들 때 이를 자동으로 체크해주지 않습니다. 즉, left보다 right 값을 작게 입력하거나 top보다 bottom 값을 작게 입력하여도 예외 자체는 발생하지 않습니다.
그러나 실제로 의도한 동작이 제대로 수행되지 않을 수 있습니다. 그런데 예외가 발생하지 않으니 동작이 제대로 수행되지 않더라도 이를 해결하기 어려울 수 있습니다.
따라서 처음에 Rect 객체를 만들 때 left 값이 right 값보다 작도록, top 값이 bottom 값보다 작도록 주의해서 만들어주어야 합니다.
3. 응용
추가로 응용할 수 있는 방법에 대해 설명하겠습니다. Rect 객체를 사용할 때 중심점을 두고 사각형을 만들 수 있습니다.
// Rect 객체 생성
Rect rect = new Rect();
int x = 500; // 중심점 x 좌표
int y = 500; // 중심점 y 좌표
int border = 100; // 원하는 길이
rect.set(x - border, y - border, x + border, y + border);
canvas.drawRect(rect, mPaint);
중심 좌표 (500, 500)에서 상하좌우로 각각 100씩 떨어져서 사각형이 그려지게 됩니다. 이러한 방식을 사용하면 특정 좌표들을 계산해서 Rect 객체를 만들어내는 등 다양한 방식으로 응용될 수 있으니 참고하시면 좋겠습니다.
4. 마무리
이것으로 Rect 클래스에 대한 설명을 마쳤습니다.
이 정보가 많은 도움이 되었다면 좋겠습니다. 궁금한 점이 있으시다면 언제든 댓글로 남겨주시길 바랍니다.
'Android > 공부' 카테고리의 다른 글
스플래시(Splash) 화면 (2) | 2021.10.01 |
---|---|
텍스트뷰(TextView) 옆에 이미지 설정하는 법 (0) | 2021.09.30 |
[Manifest 정복] 3. 매니페스트(Manifest) 의 권한, 기기 호환성, 그 이외의 요소 (0) | 2021.09.11 |
[Manifest 정복] 2. 매니페스트(Manifest)에서의 앱 구성 요소, 인텐트 필터, 아이콘 및 레이블 (0) | 2021.09.10 |
[Manifest 정복] 1. 매니페스트(Manifest)란 (with package) (0) | 2021.09.09 |