315
No
class Point
package com.example.choi.ex07_graphic;
/**
* Created by choi on 2017-02-23.
*/
//좌표값을 저장하는 클래스
public class Point {
float x, y; //좌표값
boolean isDraw ;//그리기 상태
public Point(float x, float y, boolean isDraw) {
this.x = x;
this.y = y;
this.isDraw = isDraw;
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public boolean isDraw() {
return isDraw;
}
public void setDraw(boolean draw) {
isDraw = draw;
}
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
", isDraw=" + isDraw +
'}';
}
}
class LineActivity
package com.example.choi.ex07_graphic;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
public class LineActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//xml 레이아웃 대신 커스텀 뷰 클래스 사용
setContentView(new MyView(this));
}
//View:최상위 위젯 클래스
class MyView extends View {
//좌표값을 저장할 리스트
List<Point> points =new ArrayList<>();
int mStrokeWidth = 10; // 시작 선 두께
public MyView(Context context) {
super(context);
}
//뷰를 화면에 출력
@Override
protected void onDraw(Canvas canvas) {
//캔버스의 배경색상 설정
canvas.drawColor(Color.LTGRAY);
Paint paint=new Paint();//페인트 객체 생성
paint.setStrokeWidth(mStrokeWidth);
paint.setColor(Color.RED);//페인트 색상 설정
// List 에 저장된 좌표들을 출력
for(int i =0; i<points.size(); i++){
Point now=points.get(i);//현재 좌표
if(now.isDraw){ //move 상태이면
Point before =points.get(i-1); //이전좌표값
//이전좌표부터 현재좌표까지 그리기
canvas.drawLine(before.x, before.y, now.x, now.y, paint);
}
}
}
//화면에 터치 이벤트 처리 method
@Override
public boolean onTouchEvent(MotionEvent event) {
//처음 터치 할때
if(event.getAction()==MotionEvent.ACTION_DOWN){
points.add(new Point(event.getX(), event.getY(), false));
return true;
}
//터치한 상태에서 손가락을 움직일 때
if(event.getAction()==MotionEvent.ACTION_MOVE){
points.add(new Point(event.getX(), event.getY(),true));
invalidate();//화면 갱신 요청
return true;
}
return false; //터치 이벤트 무시
}
}
}
댓글 ( 4)
댓글 남기기