본문 바로가기
Android/Android Basic

안드로이드 그리기 속성

by 수쓰뎁 2023. 2. 18.


1. 그리기 속성

안드로이드에서는 다양한 그리기 속성을 제공한다.

색상, 안티앨리어싱, 폰트 변경 등의 속성이 있다.

 

색상

색상은 색의 3원색인 RED, GREEN, BLUE 성분을 8비트로 표시하여 나타낸다.

따라서 24비트면 하나의 색상을 표현할 수 있고, 24비트를 16진수로 표시하는 것이 일반적이다.

예를 들면, #FFA10C의 형태로 나타내는 것이다.

 

빨간색으로 색상을 설정하려면 다음과 같이 하면 된다.

paint.setColor(0xFF0000);

 

많이 사용되는 색상은 미리 Color 클래스 안에 RED, GREEN, BLUE, YELLOW, BLACK 등과 같이 상수로 정의되어 있다.

paint.setColor(Color.RED);

 

안드로이드에서는 다음과 같은 메서드를 사용하여 그리기 속성을 변경할 수 있다.

 

  • void setColor(int color)
    전경색을 color로 설정한다.
  • int getColor()
    현재 전경색으로 설정된 색상을 반환한다.
  • void setAlpha(int a)
    0부터 255 사이의 값으로 투명도를 나타낸다.
  • void setStrokeWidth(float width)
    선폭을 설정한다.
  • void setStyle(Paint.Style style)
    setStyle()은 각종 도형을 그리는 데 필요한 선의 스타일을 지정한다.
    선의 스타일에는 다음과 같은 종류가 있다.
    FILL : 도형의 내부를 채운다.
    FILL_AND_STROKE : 도형의 내부를 채우면서 외곽선을 그린다.
    STROKE : 도형의 외곽선만 그린다.

 

안티 앨리어싱

안티 앨리어싱(AntiAliasing)은 도형의 경계부분을 더 매끄럽게 그려지도록 해준다.

안티 앨리어싱을 사용하면 출력 속도는 느려질 수 있다.

 

폰트

안드로이드에서 폰트는 Typeface 클래서의 객체로 표현된다.

폰트를 생성하려면 Typeface.create() 메서드를 호출한다.

현재 사용되는 폰트를 변경하려면 Paint 클래스의 setTypeface()를 사용한다.

설정된 폰트를 이용하여 문자열을 화면에 그리려면 Paint 클래스의 drawText()를 호출한다.


2. 그리기 속성 활용 예제

위의 내용을 바탕으로 각도를 증가하면서 원호를 연속적으로 그리는 예제를 작성해보자.

다음과 같은 순서로 예제를 작성한다.

 

  • 프로젝트 생성
  • MainActivity.java 작성

 

class MyView extends View {

    private Paint mPaints, mFramePaint;
    private RectF mBigOval;
    private float mStart, mSweep;

    private static final float SWEEP_INC = 2;
    private static final float START_INC = 15;

    public MyView(Context context) {		// 시간이 많이 걸리는 작업은 생성자에 미리 작성
        super(context);

		// FILL 스타일, 노란색
        mPaints = new Paint();
        mPaints.setAntiAlias(true);
        mPaints.setStyle(Paint.Style.FILL);
        mPaints.setColor(Color.parseColor("#FFFF00"));

		// STROKE 스타일, 녹색, 선폭은 3픽셀
        mFramePaint = new Paint();
        mFramePaint.setAntiAlias(true);
        mFramePaint.setStyle(Paint.Style.STROKE);
        mFramePaint.setStrokeWidth(3);
        mFramePaint.setColor(0x8800FF00);
        mBigOval = new RectF(40, 10, 900, 1000);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.parseColor("#0000FF"));
        canvas.drawRect(mBigOval, mFramePaint);		// 사각형을 그린다.
        canvas.drawArc(mBigOval, mStart, mSweep, false, mPaints);	// mStart 각도에서 mSweep만큼 원호를 그린다.

		// 그리는 각도를 증가시킨다.
        mSweep += SWEEP_INC;
        if (mSweep > 360) {
            mSweep -= 360;
            mStart += START_INC;
            if (mStart >= 360) {
                mStart -= 360;
            }
        }
        invalidate();	// 다시 onDraw()가 호출되게 한다.
    }
}

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
    }
}

3. 예제 실행 결과

각도를 증가하며 원호를 연속적으로 그리는 예제의 실행 결과는 다음과 같다.

 

구현하고자 했던대로 각도를 증가하면서 원호를 반복적으로 그려준다.

반응형

댓글