마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

list로 값을받은 for 문을 path로 부드럽게 표현하고싶습니다. 어떻게 짜야될지 의문입니다..

0 추천

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 부분만 고치면 될껏같은데.....
 

메시z (120 포인트) 님이 2016년 2월 4일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...