안드로이드 간단한 그림판 만들기

Words
262
Reading
2 min
Listen
Play
9y


안녕하세요!! wonnieyoon@wonnieyoon입니다.
dayoung@dayoung님께서 예쁜 대문을 만들어 주셔서 앞으로는
이 대문만 사용할것 같네요 ㅎㅎdayoung@dayoung님 다시 한번 감사합니다.
다들 그림판 한번씩 사용해보셨을꺼에요. 오늘은 윈도우 그림판이 아닌 그림판 앱을 만들어 볼 생각입니다.
간단하게 만들기 때문에 다양한 기능이 들어가진 않지만 오늘 만든것에서 필요한 기능을 하나씩 넣으시면서 앱을 크게 만들어나가면 될거에요.


코드

public class MainActivity extends AppCompatActivity {

class Point{
    float x;
    float y;
    boolean check;
    int color;

    public Point(float x, float y, boolean check,int color)
    {
        this.x = x;
        this.y = y;
        this.check = check;
        this.color = color;
    }
}

class MyView extends View
{
    public MyView(Context context) { super(context); }

    @Override
    protected void onDraw(Canvas canvas) {
        Paint p = new Paint();
        p.setStrokeWidth(15);
        for(int i=1 ; i<points.size() ; i++)
        {
            p.setColor(points.get(i).color);
            if(!points.get(i).check)
                continue;
            canvas.drawLine(points.get(i-1).x,points.get(i-1).y,points.get(i).x,points.get(i).y,p);
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                points.add(new Point(x,y,false , color));
            case MotionEvent.ACTION_MOVE :
                points.add(new Point(x,y,true , color));
                break;
            case MotionEvent.ACTION_UP :
                break;
        }
        invalidate();
        return true;
    }
}

ArrayList<Point> points = new ArrayList<Point>();
Button draw_red_btn,draw_blue_btn,draw_black_btn,clearbtn;
LinearLayout drawlinear;
int color = Color.BLACK;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final MyView m = new MyView(this);
    /* ----- 색 변경 ------ */
    findViewById(R.id.draw_red_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            color = Color.RED ;
        }
    });
    findViewById(R.id.draw_blue_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            color = Color.BLUE ;
        }
    });
    findViewById(R.id.draw_black_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            color = Color.BLACK ;
        }
    });

    clearbtn = findViewById(R.id.clear_btn);
    drawlinear = findViewById(R.id.draw_linear);
    clearbtn.setOnClickListener(new View.OnClickListener() { //지우기 버튼 눌렸을때
        @Override
        public void onClick(View v){
          points.clear();
          m.invalidate();
        }
    });
    drawlinear.addView(m);

}
}


결과

간단하게 그리는 기능과 지우기 기능만 넣었습니다.
이 앱의 핵심은 선을 그릴때 끊기지 않고 계속해서
부드럽게 그리는 방법입니다.
코드를 보시면 아시겠지만 선을 부드럽게 그리기 위해서는 터치를 하는 시점과 터치를 하고나서 움직이는 시점을 판단할수 있는 부분이 들어가야 합니다.
처음 하시면 단순해 보이지만 결코 쉬운것이 아니란것을 알게 될것입니다