* 선그리기 예제코드

TouchEvent로 누른시점과 드레그한 지점의 점좌표를 모두 받아드립니다.

[누르기 -> 드레그한 지점까지] 이러한 그룹들을 곡선으로 그려줍니다.

 

TouchEvent 까지는 매번 터치시마다 잘 실행됩니다만...

onDraw 메소드가 호출되지 않습니다. onCreate를 실행하는 첫 시점에만 작동합니다.

(손으로 막그리고, 홈으로 가고 다시 어플키면 그려져있음. 그러나 실시간으로는 작동하지 않음.)

 

책보고 예제를 따라했는데, 무엇이 문제일까요?

 

 

// StudyCoding01.java

 

package com.study.exam01;

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;
import android.widget.Toast;

public class StudyCoding01 extends Activity {
    /** Called when the activity is first created. */
   
   
    private MyView vw;
    ArrayList<Vertex> arVertex;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        vw = new MyView(this);
       
      //  setContentView(vw);
        arVertex = new ArrayList<Vertex>();
       
    }
   
    public void onResume(){
     super.onResume();
     setContentView(vw);
    }
   
    public class Vertex {
     Vertex(float ax, float ay, boolean ad) {
      x = ax;
      y = ay;
      Draw = ad;
     }
     float x;
     float y;
     boolean Draw;  
    }
   
    protected class MyView extends View {
     Paint mPaint;
     
     public MyView(Context context) {
      super(context);
      
      //Paint 객체 미리 초기화
      mPaint = new Paint();
      mPaint.setColor(Color.BLACK);
      mPaint.setStrokeWidth(3);
      mPaint.setAntiAlias(true);
  
     }
     
     // 터치 이동시마다 정점들을 추가한다.
     
     public boolean onTouchEvent(MotionEvent event) {
      if(event.getAction() == MotionEvent.ACTION_DOWN) {
       arVertex.add(new Vertex(event.getX(), event.getY(), false));
       

       return true;
      }
      if(event.getAction() == MotionEvent.ACTION_MOVE) {
       arVertex.add(new Vertex(event.getX(), event.getY(), true));
      
       return true;
      }
      return false;
     }
     
     @Override
     public void onDraw(Canvas canvas) {
      canvas.drawColor(Color.LTGRAY);
      
      //정점을 수회하면서 선분으로 잇는다.
      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);
        
       }
      }
      
     }
 
     
    }
   
   
}