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

그림판 관련 지우개 및 색

0 추천
package com.example.jungsengup.paint;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

import static com.example.jungsengup.paint.R.layout.activity_main;

public class MainActivity extends AppCompatActivity {

    MyView m;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        setContentView(activity_main);
        super.onCreate(savedInstanceState);

        LinearLayout ll = new LinearLayout(this); // 여러 뷰를 넣을 컨테이너
        ll.setOrientation(LinearLayout.VERTICAL);

        m = new MyView(MainActivity.this);

        ll.addView(m); // 레이아웃에 포함
        setContentView(ll);

    } //레이아웃 생성

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_test, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.save_button) {
            Toast.makeText(this, "저 장", Toast.LENGTH_SHORT).show();
            return true;
        }

        if (id == R.id.exit_button) {
            Toast.makeText(this, "종 료", Toast.LENGTH_SHORT).show();
            android.os.Process.killProcess(android.os.Process.myPid());
        }

        if (id == R.id.elase) {
            Toast.makeText(this, "지우개", Toast.LENGTH_SHORT).show();
        }


        if (id == R.id.color) {
            Toast.makeText(this, "회색", Toast.LENGTH_SHORT).show();

            m.paint.setStyle(Paint.Style.STROKE); // 선을 긋게 하는 부분
            m.paint.setStrokeWidth(10f);// 선의 굵기 설정
            m.paint.setColor(0xaa999999);
        }

        if (id == R.id.color2) {
            Toast.makeText(this, "파란색", Toast.LENGTH_SHORT).show();

            m.paint.setStyle(Paint.Style.STROKE); // 선을 긋게 하는 부분
            m.paint.setStrokeWidth(10f);// 선의 굵기 설정
            m.paint.setColor(0xaa000099);
        }

        if (id == R.id.color3) {
            Toast.makeText(this, "검정", Toast.LENGTH_SHORT).show();

            m.paint.setStyle(Paint.Style.STROKE); // 선을 긋게 하는 부분
            m.paint.setStrokeWidth(10f);// 선의 굵기 설정
            m.paint.setColor(0xffffffff);
        }

        return super.onOptionsItemSelected(item);
    }


}

class MyView extends View{ // 앞서 만든 레이아웃에 저장하기 위한 클래스


    public Paint paint = new Paint();
    Path path  = new Path();    // 이미 그어진 선을 저장하기 위한 객체

    public MyView(Context context) {
        super(context);

        paint.setStyle(Paint.Style.STROKE); // 선을 긋게 하는 부분
        paint.setStrokeWidth(10f);// 선의 굵기 설정
        paint.setColor(0xffffffff);
    }

    @Override
    protected void onDraw(Canvas canvas) { // 화면을 그려주는 메서드
        canvas.drawPath(path, paint); // 저장된 path 를 그려라

    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                path.moveTo(x, y); // 위치 이동
                break;
            case MotionEvent.ACTION_MOVE:
                path.lineTo(x, y); // 위치에 선을 남기는 부분
                break;
            case MotionEvent.ACTION_UP:
                break;
        }


        invalidate(); // 화면을 다시 만들어라


        return true;
    }
}
코드에서 색상을 바꾸면 이전에 있던것도 바뀌고 검정색이 ffffff아닌가요? 그리고 지우개 기능을 어떻게 넣는지 모르겟습니다.
joy178 (200 포인트) 님이 2016년 10월 5일 질문

답변 달기

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