public class MyView extends View{
//필요한 멤버필드 정의하기
ArrayList<Point> list;//상태값을 상수로 정의
private Path mPath =null;
private Paint mPaint =null;
static final int RED_STATE=0;
static final int BLUE_STATE=1;
static final int YELLOW_STATE=2;
//현재 색의 상태값을 저장할 변수
int colorState = RED_STATE;
//Paint 객체를 저장할 배열 객체 생성하기
Paint[] paintList = new Paint[3];
public MyView(Context context) {
super(context);
init();//초기화
}
//xml에 view를 추가시 인자2개짜리 생성자가 필요하다!!!!!!!!!!!
public MyView(Context context, AttributeSet attrs){
super(context, attrs);
init();//초기화
}
//초기화 하는 메소드
public void init(){
//arraylist 객체 생성하기
list=new ArrayList<Point>();
//선을 그림 Paint 객체 생성 및 초기화
Paint redPaint = new Paint();
redPaint.setColor(Color.RED);
redPaint.setStrokeWidth(5); //선의 굵기
redPaint.setAntiAlias(true);//경계면을 부드럽게 처리하기
Paint bluePaint = new Paint();
bluePaint.setColor(Color.BLUE);
bluePaint.setStrokeWidth(5); //선의 굵기
bluePaint.setAntiAlias(true);//경계면을 부드럽게 처리하기
Paint yellowPaint = new Paint();
yellowPaint.setColor(Color.YELLOW);
yellowPaint.setStrokeWidth(5); //선의 굵기
yellowPaint.setAntiAlias(true);//경계면을 부드럽게 처리하기
//페인트 객체를 배열에 저장한다.
paintList[0]=redPaint;
paintList[1]=bluePaint;
paintList[2]=yellowPaint;
}
//화면을 그리는 메소드
@Override
protected void onDraw(Canvas canvas) {
//배경을 흰색으로
canvas.drawColor(Color.WHITE);
//배열에 저장된 Point 객체의 좌표값을 이용해서 선을 그린다.
for(int i=0 ;i < list.size(); i++){
//배열에서 i번째 인덱스에 있는 Point 객체를 얻어온다.
Point p = list.get(i);
if(!(p.isStart)){
canvas.drawLine(list.get(i-1).x, //시작점x
list.get(i-1).y, //시작점y
list.get(i).x, //도착점x
list.get(i).y, //도착점y
paintList[list.get(i).colorState]); //선의 속성을 가지고 있는 paint객체
}
}
}
//터치 입력을 받기 위해서
@Override
public boolean onTouchEvent(MotionEvent event) {//event에 터치점 좌표가 들어온다.
//이벤트가 일어난 곳의 좌표 얻어오기
int eventX=(int)event.getX();
int eventY=(int)event.getY();
//이벤트의 종류에 따라서 다른 동작을 하게 한다.
switch(event.getAction()){
case MotionEvent.ACTION_DOWN :
//액션 다운 이벤트가 발생하면 라인의 시작점이 된다.
Point p = new Point(eventX, eventY, true, colorState);
//생성한 객체를 배열에 담는다.
list.add(p);
break;
case MotionEvent.ACTION_MOVE :
//액션 무브 이벤트가 발생하면 시작점이 아니다 isStart=false
Point p2 = new Point(eventX, eventY, false, colorState);
list.add(p2);
//화면 갱신하기
invalidate();
break;
}
return true;
}
안드로이드 그림판으로 공부중인 학생입니다. 인터넷예제를 이용하여 공부를 하면서 고치고 싶은 부분이 생겼습니다.
canvas.drawLine을 list 생성자로 for문으로 리스트값을 반복해 drawLine x,y값을 받아들여 한점한점씩 긋는 부분인데..
이렇게 원을 그리면 각지는 현상이 생깁니다.. 저는 path를 써서 동그랗게 선을 그리면 매끄럽게 그리고싶은데요..
아무리생각을해봐도 for문으로 list를 받아서 Path로 그리고 싶은데 어떻게 구현을 해야될지모르겠습니다. 도와주세요... ondraw 부분만 고치면 될껏같은데.....