티스토리 뷰
직전 포스팅에서는 원을 하나 구성하여 클릭 이벤트를 구성했다면, 이번 포스팅에서는 좀 더 다양한 모양의 도형들을 그려보고 이를 위해 사용하는 메서드와 도형 효과를 주기 위해 사용하는 다양한 메서드들을 정리 해보려고 한다.
우선, 그래픽을 그릴 때 필요한 주요 클래스는 다음과 같다.
클래스 | 설명 |
Canvas | 뷰의 표면에 직접 그릴 수 있도록 만들어 주는 객체로 그래픽 그리기를 위한 메서드가 정의되어 있다. |
Paint | 그래픽 그리기를 위해 필요한 색상 등의 속성을 담고 있다. |
Bitmap | 픽셀로 구성된 이미지로 메모리에 그래픽을 그리는 데 사용한다. |
Drawable | 사각형, 이미지 등의 그래픽 요소가 객체로 정의되어 있다. |
다음 예제는 사각형이나 원을 그리고 해당 Paint 객체에 스타일을 설정하는 예제이다.
◎CustomView
package com.example.samplegraphic.custom;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class CustomView extends View {
// 그래픽을 그리기 위한 속성을 담고 있음
private Paint paint;
public CustomView(Context context) {
super(context);
init(context);
}
public CustomView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
paint = new Paint();
}
@Override
// View 가 화면에 그려질 때 호출되는 콜백
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setStyle(Paint.Style.FILL); // 첫번째 사각형을 Fill 스타일로
paint.setColor(Color.RED);
canvas.drawRect(10, 10, 100, 100, paint);
paint.setStyle(Paint.Style.STROKE); // 첫번째 사각형을 Stroke 스타일로
paint.setStrokeWidth(2.0F);
paint.setColor(Color.GREEN);
canvas.drawRect(10, 10, 100, 100, paint);
paint.setStyle(Paint.Style.FILL); // 두번째 사각형을 Fill 스타일로
paint.setARGB(128, 0, 0, 255);
canvas.drawRect(120, 10, 210, 100, paint);
// 두번째 사각형을 Stroke로 설정하고 PathEffect 적용
DashPathEffect dashEffect = new DashPathEffect(new float[]{5,5}, 1);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3.0F);
paint.setPathEffect(dashEffect);
paint.setColor(Color.GREEN);
canvas.drawRect(120, 10, 210, 100, paint);
paint = new Paint();
paint.setColor(Color.MAGENTA);
canvas.drawCircle(50, 160, 40, paint);
paint.setAntiAlias(true);
canvas.drawCircle(160, 160, 40, paint);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
paint.setColor(Color.MAGENTA);
paint.setTextSize(50);
canvas.drawText("Text (Stroke)", 20, 260, paint);
paint.setStyle(Paint.Style.FILL);
paint.setTextSize(50);
canvas.drawText("Text", 20, 320, paint);
/**
* 그리기 연산이 일어나는 영영을 설정: clipping
* 전체 paint 객체 중 클리핑 영역으로 설정한 사각형의 일부만을 그림
* */
canvas.clipRect(220, 240, 250, 270);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
canvas.drawRect(220, 240,320,340, paint);
}
}
Canvas 객체로 호출하여 사용할 수 있는 대표적인 메서드들을 정리하면 다음과 같다.
메서드 | 설명 |
점 그리기 | void drawPoint(float x, float y, Paint paint) |
선 그리기 | void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) |
사각형 그리기 | void drawRect(float left, float top, float right, float paint) |
둥근 모서리의 사각형 | void drawRoundRect(RectF rect, float rx, float ry, Paint paint) |
원 그리기 | void drawCircle(float cx, float cy, float radius, Paint paint) |
타원 그리기 | void drawOval(RectF oval, Paint paint) |
아크 그리기 | void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint) |
패스 그리기 | void drawPath(Path path, Paint paint) |
비트맵 그리기 | void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) |
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Graphic 4: Bitmap 그리기 (0) | 2022.04.17 |
---|---|
[Android] Graphic 3: Drawable 그리기 (0) | 2022.04.16 |
[Android] Graphic 1: View 에 그래픽 그리기 (0) | 2022.04.15 |
[Android] Content Provider 3: 주소록 조회 (0) | 2022.04.14 |
[Android] startActivityForResult() < deprecated > (0) | 2022.04.14 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- Promise
- 이탈리안 레스토랑
- await
- 파니노구스토
- redux
- javascript
- AsyncStorage
- 인천 구월동 맛집
- 정보보안기사 #실기 #정리
- react-native
- 인천 구월동 이탈리안 맛집
- 맛집
- react
- redux-thunk
- Async
- Total
- Today
- Yesterday