출처: https://3months.tistory.com/307 [Deep Play]

안드로이드/연습

[Android] 간단 그림판

코딩하는 랄뚜기 2021. 8. 26. 11:54

MainActivity.java

 

package com.example.project9_1;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    final static int LINE = 1, CIRCLE = 2;
    static int curShape = LINE;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyGraphicView(this));
        setTitle("간단 그림판");
    }
    private static class MyGraphicView extends View {
        int startX = -1,startY=-1,stopX=-1,stopY=-1;
        public MyGraphicView(Context context){
            super(context);
        }
        @Override
        public boolean onTouchEvent(MotionEvent event){
            switch(event.getAction()){
                //터치를 하면 시작점의 좌표를 가져온다.
                case MotionEvent.ACTION_DOWN:
                    startX=(int)event.getX();
                    startY=(int)event.getY();
                    break;
                //ACTION_MOVE와 ACTION_UP을 동일하게 취급하는 이유는 손가락을 계속 따라다니면서
                //흔적이 보이는 효과를 주어야하기 때문
                case MotionEvent.ACTION_MOVE:
                case MotionEvent.ACTION_UP:
                    stopX = (int) event.getX();
                    stopY = (int) event.getY();
                    //손가락을 뗐을 때 onDraw가 실행될 수 있도록 invalidate를 해준다
                    this.invalidate();
                    break;
            }
            return true;
        }
        protected void onDraw(Canvas canvas){
            super.onDraw(canvas);
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setStrokeWidth(5);
            paint.setStyle(Paint.Style.STROKE);
            paint.setColor(Color.RED);

            switch(curShape){
                case LINE:
                    canvas.drawLine(startX,startY,stopX,stopY,paint);
                    break;
                case CIRCLE:
                    int radius=(int)Math.sqrt(Math.pow(stopX-startX,2)+Math.pow(stopY-startY,2));
                    canvas.drawCircle(startX,startY,radius,paint);
                    break;
            }
        }
    }
    public boolean onCreateOptionsMenu(Menu menu){
        super.onCreateOptionsMenu(menu);
        menu.add(0,1,0,"선 그리기");
        menu.add(0,2,0,"원 그리기");
        return true;
    }
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()){
            case 1:
                curShape = LINE; // 선
                return true;
            case 2:
                curShape = CIRCLE; // 원
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

 

실행 화면

 

 

'안드로이드 > 연습' 카테고리의 다른 글

[Android] ListView  (0) 2021.08.27
[Android] 새로운 액티비티 추가하기  (0) 2021.08.26
[Android] Graphic  (0) 2021.08.26
[Android] raw 폴더 파일 처리  (0) 2021.08.24
[Android] 간단 일기장  (0) 2021.08.24