Android - Touch Line ( 터치인식 선그리기 )

Android 2011.09.10 16:54

스마트폰 단말기의 터치인식 기능을 사용하여서 선을 그리는 실습입니다.
각 핸드폰마다 기능이 있는데요 백키라던가 홈키 등의 키들을 사용 할 수 있습니다.
몇가지 예외가 있지만 쓸 수 있는 기능키들이 몇가지 있습니다.

오늘은 터치 인식을 이용하여 선을 그리는 것을 해보겠습니다.


역시 제일먼저 프로젝트 생성

Project name : ExamTouchLine
Build Target : Android 2.1
Package name : jsh.exam.touchline
Create Activity : touchline
Min SDK Version : 7


자바 소스로 배경까지 지정하여서 하기때문에 별다른 xml소스는 필요없습니다.


자바 소스

touchline.java

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class touchline extends Activity {
 private DrawView vw;
 ArrayList<Vertex> arVertex;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // setContentView(R.layout.main);
  // 기존 뷰는 사용하지 않는다.
  // 새로운 뷰를 생성하여 액티비티에 연결
  vw = new DrawView(this);
  setContentView(vw);

  arVertex = new ArrayList<Vertex>();
 }

 public class Vertex {
  float x;
  float y;
  boolean draw;

  // 그리기 여부

  public Vertex(float x, float y, boolean draw) {
   this.x = x;
   this.y = y;
   this.draw = draw;
  }
 }

 protected class DrawView extends View {
  Paint mPaint;

  // 페인트 객체 선언
  public DrawView(Context context) {
   super(context);
   // 페인트 객체 생성 후 설정
   mPaint = new Paint();
   mPaint.setColor(Color.BLACK);
   mPaint.setStrokeWidth(3);
   mPaint.setAntiAlias(true);
   // 안티얼라이싱
  }

  /** 터치이벤트를 받는 함수 */
  @Override
  public boolean onTouchEvent(MotionEvent event) {
   switch (event.getAction()) {
   case MotionEvent.ACTION_DOWN:
    arVertex.add(new Vertex(event.getX(), event.getY(), false));
    break;
   case MotionEvent.ACTION_MOVE:
    arVertex.add(new Vertex(event.getX(), event.getY(), true));
   }
   invalidate();
   // onDraw() 호출
   return true;
  }

  /** 화면을 계속 그려주는 함수 */
  @Override
  protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   canvas.drawColor(Color.WHITE);
   // 캔버스 배경색깔 설정
   // 그리기
   for (int i = 0; i < arVertex.size(); i++) {
    if (arVertex.get(i).draw) {
     // 이어서 그리고 있는 중이라면
     canvas.drawLine(arVertex.get(i - 1).x,
       arVertex.get(i - 1).y, arVertex.get(i).x,
       arVertex.get(i).y, mPaint);
     // 이전 좌표에서 다음좌표까지 그린다.
    } else {
     canvas.drawPoint(arVertex.get(i).x, arVertex.get(i).y,
       mPaint);
     // 점만 찍는다.
    }
   }
  }
 }
}


실행 결과






다음에 이것을 이용하여서
그림을 그린 뒤 사진으로 저장하는 것까지해서
그림메모어플을 짠ㅋㅋ
간단히 만들면 어떨까 싶습니다.

저작자 표시
신고
Trackback 0 : Comment 0

Write a comment