[안드로이드] 그림판 앱 만들기 (기능 추가)

Updated:

Intro

이번 과제에서는 그림판의 기능을 추가해보았습니다. 저번 과제에서는 새파일 불러오기, 펜 색상 변경하기, 지우개, 저장하기 토스트 메시지 띄워주기를 하였습니다. 이번에는 그 기능에다가 도형 그리기, colorPicker 삽입, 파일로 내보내기 기능을 추가하여 보았습니다.

설명

image1

먼저 기능들이 더 추가 되었기 때문에 activity_main.xml 파일에 버튼들을 추가하여 주었습니다. 도형 그리기 버튼과, 원, 삼각형, 사각형 그림의 버튼을 추가하여 주었고, ColorPicker 기능을 구현하기 위해 돋보기 버튼도 넣어주었습니다. 도형과 색상이 나와있는 LinearLayout은 아래 코드와 같이 View를 GONE으로 설정해 주었기 때문에 실행을 하고 색상 버튼과 도형 그리기 버튼을 누르지 않는 이상 뷰에 나타나지 않습니다.

paintLayout.setVisibility(View.GONE);
figureLayout.setVisibility(View.GONE);

GONE은 INVISIBLE과 해당 값으로 설정해주었을 때, 뷰가 보이지 않는다는 점은 같지만, 그 뷰가 공간을 그대로 차지하고 있는지 완전히 없어지는지에 대한 차이가 있습니다. INVISIBLE로 설정해주었을때는 해당뷰에서 아무런 영향이 없어 위의 화면과 같이 두 줄로 보이지만, GONE으로 설정해놓으면 하나의 뷰가 완전히 사라져서 뷰들의 위치가 밀려나게 됩니다.

추가된 기능들 중, 도형 그리기 기능은 도형 버튼을 누르면 해당하는 모양의 도형들이 Canvas위에 그려집니다. 물론 색상도 바꿔서 그리는 것이 가능합니다. MainActivity에서 getFigure()메소드를 추가하여 사용자가 도형 버튼을 눌렀을 경우 해당하는 도형의 태그 값을 SingletouchView의 setFigure(figure)메소드의 매개변수 값으로 넘겨 주었습니다.

image4

매개변수로 받은 도형의 태그 값은 SingletouchView에서 어떤 도형인지 구분하여주는 용도로 사용 됩니다.

image5

위의 switch-case문에도 나와 있듯이 현재 도형의 값이 1이면 원, 2이면 삼각형, 3이면 사각형을 그리는 메소드를 호출합니다. 도형을 그리는 메소드들은 각각 정의하여 주었습니다.

image6

그림판을 저장하는 기능은 먼저 STORAGE를 사용하려면 AndroidManifest.xml에서 저장공간에 대한 권한을 추가해 주어야 합니다. 아래와 같이 두가지 권한을 추가하여 주었습니다.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

그 다음으로 저장공간에 대한 접근 권한이 있는지 없는지를 체크하였습니다.

image7

이렇게 설정을 해주고 어플을 실행시키면 아래 화면처럼 권한 허용을 요청하는 alterbox가 나옵니다. 저장소를 사용하기위해 Allow를 선택하여 주었습니다. 그 후, 그림 파일을 현재 날짜로 저장을하도록 하였습니다.

image8

image9

ColorPicker(색상추출) 기능은 무료 Git 저장소인 Git Hub https://github.com/jaredrummler/ColorPicker 에서 라이브러리를 다운받아 사용하였습니다. 먼저 build.gradle(Module: app)에 complie경로를 추가하였습니다.

image10

그 다음 ColorPicker 버튼에 익명 클래스를 생성하여 이벤트리스너로 사용하였고, 버튼을 누르면 Main화면에서 ColorPicker 대화상자가 나오도록 하였습니다.

image11

인터페이스 ColorPickerDialogListener를 정의하고 MainActivity에 구현하여 주었습니다.

image12

애뮬레이터를 실행을 하고 색상을 select하면 이런 Exception 오류가 발생하면서 어플이 종료됩니다… ColorPickerDialogListener 인터페이스를 구현해 주었는데도 구현을 하라는 오류가 나와서 해결해보려고 했지만 해결하지 못했습니다…

결과

  • 시작 화면

image13


  • 색상 버튼을 누르면 하단에 색상을 고를 수 있도록 버튼이 나옴

image14


  • 도형 그리기 버튼을 선택하면 하단에 도형 버튼 표시

image15


  • 여러 색으로 도형을 그린 화면

image16


  • ColorPicker 기능

image17

image18

Leave a comment