View에 그림 그리기
안드로이드에서는 Bitmap 또는 Paint를 이용해 Canvas에 그림을 그리고 View에 적용할 수 있습니다.
Canvas
Canvas는 View의 그리드 표면, 뷰에 그림을 그릴 수 있는 도화지입니다.
이는 View 클래스의 onDraw() 메서드의 인수로 전달됩니다.
다음은 Canvas의 주요 메서드입니다.
메서드 이름 | 그리기 대상 |
void drawPoint(float x, float y, Paint paint) | 점 |
void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) | 선 |
void drawCircle(float cx, float cy, float radius, Paint paint) | 원형 |
void drawRect(float left, float top, float right, float bottom, Paint paint) void drawRect(Rect r, Paint paint) |
사각형 |
void drawText(String text, float x, float y, Paint paint) | 텍스트 |
void drawARGB(int a, int r, int g, int b) void drawRGB(int r, int g, int b) void drawColor(int color) |
색칠 |
void drawPath(Path path, Paint paint) | 이동 경로 (연속되는 꺾은 선) |
void drawPaint(Paint paint) | Paint 객체 |
void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) | Bitmap 객체 |
void invalidate() | Canvas 새로 그리기 (지금까지 그린 것들 View에 반영) |
Paint
Paint는 그리기에 대한 속성 정보(선의 굵기, 색상, 스타일 등)를 가지는 객체입니다.
이는 모든 그리기 함수에 인수로 전달됩니다.
다음은 Paint의 주요 메서드입니다.
메서드 이름 | 속성 |
void setColor(int color) | 색상 |
void setStyle(Paint.Style style) | 도형의 스타일 - FILL : 채우기 (default) - STROKE : 외곽선 - STROKE_AND_FILL : 채우기 + 외곽선 |
void setStrokeWidth(float width) | 선의 굵기 |
void setStrokeJoin(Paint.Join join) | - MITER : 모서리가 90도로 각진 형태 (default) - BEVEL : 모서리가 깎인 형태 - ROUND : 모서리가 둥근 형태 |
void setStrokeCap(Paint.Cap cap) | - ROUND : 선이 둥근 모양으로 끝남 - SQUARE : 선이 사각형 모양으로 끝남 - BUTT : 지정한 좌표에서 선이 끝남 |
void setAntAlias(boolean aa) | 안티에일리어싱(anti-aliasing) 기법 적용 여부 (계단식 깨짐 현상 제거 및 경계면 부드럽게 처리) |
Bitmap와 BitmapFactory
Bitmap은 안드로이드에서 이미지를 표현하기 위해 사용되는 객체입니다.
메모리에서 만들어지는 모든 이미지는 Bitmap 객체로 관리됩니다.
Bitmap 객체를 통해 이미지를 우리가 원하는 대로 조작할 수 있습니다.
Canvas의 drawBitmap() 메서드를 통해 Bitmap을 출력할 수 있습니다.
메서드 이름 | 역할 |
Bitmap createBitmap(int width, int height, Bitmap.Config config) | Bitmap 객체 생성 |
BitmapFactory는 Bitmap 객체를 만들어주는 여러 가지 decode 함수를 제공합니다.
메서드 이름 | 역할 |
Bitmap decodeFile(String pathName, BitmapFactory.Options opts) | 지정된 파일 경로를 Bitmap 객체로 decode |
Bitmap decodeResource(Resources res, int id, BitmapFactory.Options opts) | 지정된 리소스를 Bitmap 객체로 decode |
onDraw() 구현하기
class CustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private val paint = Paint() // 그리기 속성 정보
// 뷰의 내용이 렌더링 될때 호출됨
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
// 사각형 그리기
val rect = RectF()
rect.set(50f, 50f, 400f, 400f)
paint.apply {
color = Color.RED
style = Paint.Style.STROKE
strokeWidth = 20f
}
canvas?.drawRect(rect, paint)
// 원 그리기
paint.apply {
color = Color.GREEN
style = Paint.Style.FILL
}
canvas?.drawCircle(800f, 800f, 200f, paint)
}
}
728x90
반응형
'안드로이드 > UI' 카테고리의 다른 글
[Android] SearchView (0) | 2023.09.15 |
---|---|
[Android] CardView (0) | 2023.08.22 |
[Android] WebView 사용하기 (0) | 2023.08.05 |
[Android] AppBar 사용하기 (0) | 2023.07.29 |
[Android] Chip과 ChipGroup (0) | 2023.07.20 |