8. 그래픽 – 1. 기본

이번에는 안드로이에서의 그래픽에 관해 간단히 알아보기 위한 실습을 할 거예요.

[그림] Graphic 기본 실습 실행화면

 그래픽을 표현할 때에는 View 클래스에서 확장한 클래스를 정의하여 구현합니다. 그리고 기존 Activity 클래스의 onCreate 메서드에서 컨텐츠 뷰를 설정할 때 layout(activity_main.xml) 파일을 전달하였는데 여기에서는 View클래스에서 확장한 클래스 개체를 전달합니다.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyGraphView(this));//R.layout.activity_main);
    }

    private static class MyGraphView extends View{
        public MyGraphView(Context context){
            super(context);
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
        }
    }
}

View에서 파생한 클래스에는 onDraw 메서드를 재정의하고 이 곳에서 실제 그리기 작업을 진행합니다. 화면에 도형을 그릴 때 사용하는 개체는 Canvas이고 이 때 펜의 두께나 색상 등의 그리기 정보를 기억할 Paint개체를 이용합니다.

            Paint paint = new Paint();
            paint.setStrokeWidth(20);
            canvas.drawLine(10,10,300,10,paint);
            paint.setColor(Color.RED);
            paint.setStrokeWidth(5);
            canvas.drawLine(10,40,300,40,paint);

            paint.setStyle(Paint.Style.FILL);
            canvas.drawRect(new Rect(10,50,100,120),paint);
            paint.setStyle(Paint.Style.STROKE);
            canvas.drawRect(new Rect(120,50,220,120),paint);

            paint.setColor(Color.GREEN);
            canvas.drawCircle(360,100,80,paint);

            paint.setColor(Color.BLUE);
            canvas.drawRoundRect(300,200,400,300,50,50,paint);

            paint.setStrokeWidth(4);
            paint.setColor(Color.GREEN);
            paint.setTextSize(60);
            canvas.drawText("언제나 휴일",0,200,paint);

다음은 MainActivity.java 파일의 소스 코드입니다. 참고로 activity_main.xml 파일은 필요 없습니다.

package com.example.ehclub.ex_graphic1;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyGraphView(this));//R.layout.activity_main);
    }

    private static class MyGraphView extends View{
        public MyGraphView(Context context){
            super(context);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);

            Paint paint = new Paint();
            paint.setStrokeWidth(20);
            canvas.drawLine(10,10,300,10,paint);
            paint.setColor(Color.RED);
            paint.setStrokeWidth(5);
            canvas.drawLine(10,40,300,40,paint);

            paint.setStyle(Paint.Style.FILL);
            canvas.drawRect(new Rect(10,50,100,120),paint);
            paint.setStyle(Paint.Style.STROKE);
            canvas.drawRect(new Rect(120,50,220,120),paint);

            paint.setColor(Color.GREEN);
            canvas.drawCircle(360,100,80,paint);

            paint.setColor(Color.BLUE);
            canvas.drawRoundRect(300,200,400,300,50,50,paint);

            paint.setStrokeWidth(4);
            paint.setColor(Color.GREEN);
            paint.setTextSize(60);
            canvas.drawText("언제나 휴일",0,200,paint);
        }
    }
}