이번에는 안드로이에서의 그래픽에 관해 간단히 알아보기 위한 실습을 할 거예요.
그래픽을 표현할 때에는 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); } } }