안드로이드

 

        

 

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; //터치 이벤트 무시
        }




    }




}

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

Nothing comes amiss to a hungry man. (시장이 반찬이다.)

댓글 ( 4)

댓글 남기기

작성