* 선그리기 예제코드
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);
}
}
}
}
}




엉 ~
onDraw 호출이 없는것때문이 아니나요~
터치함수안에 invalidate(); 를 넣어주시면 금방 될겁니다.