2013년 7월 16일 화요일

[Android] 뷰 위에 그래픽을 그리기

1. 뷰 위에 그래픽을 그리는 순서(정형화된 방법)

1.1 새로운 클래스를 만들고 뷰를 상속받는다.

1.2 페인트 객체를 초기화하고 필요한 속성을 설정한다.

1.3 뷰클래스에 정의된 onDraw() 오버라이딩해서 메서드 내에 원하는 그림을 그리는 메소드를 호출한다.

1.4 onTouch() 메서드 내에 터치 이벤트를 처리하는 코드를 넣는다.

1.5 새로 만든 뷰를 메인 액티비티에 추가한다.

2. 예제
android version = jelly bean
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

// 뷰를 상속받아 새로운 뷰를 만든다
public class CustomView extends View {

 // paint객체 - 그래픽 그리기를 위해 필요한 색깔 , 폰트 등을 저장하는곳
 Paint paint;
 float curX;
 float curY;

 public CustomView(Context context) {
  super(context);
  init();
 }

 public CustomView(Context context, AttributeSet attrs) {
  super(context, attrs);
  init();
 }

 // 뷰의 초기화 작업
 private void init() {

                // 페인트 객체 생성 및 색깔 설정
  paint = new Paint();
  paint.setColor(Color.RED);
 }

 // 뷰에 그림을 그릴때 자동으로 호출되는 메서드
 // 이뷰가 화면상에 보여지기 바로전에 호출된다.
 @Override
 protected void onDraw(Canvas canvas) {

  // 뷰에 사격형을 그립니다.
  // canvas - 뷰의 표면에 직접 그릴 수 있도록 만들어 주는 객체로 그래픽 그리기를 위한 메소드가 정의되어 있다.
  canvas.drawRect(curX, curY, curX + 100.0f, curY + 100.0f,paint);
  
  super.onDraw(canvas);
 }

 // 뷰안에서 터치 이벤트가 발생할때 자동으로 호출되는 메서드
 // return 값은 true 로 만들어줘야한다.
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  int action = event.getAction();

  switch (action) {
  // 누른 상태
  case MotionEvent.ACTION_DOWN:
   break;
   
  // 누르고 욺직인 상태
  case MotionEvent.ACTION_MOVE:
   
   curX = event.getX();
   curY = event.getY();

   // 뷰의 그래픽을 다시 그리게 한다 .
   // OnDraw() 메서드를 호출하게 한다.
   invalidate();
   
   break;
   
  // 누르고 땔때 상태
  case MotionEvent.ACTION_UP:
   break;
  default:
  }

  return true;
 }

}

댓글 1개: