로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
심화

안드로이드 앱 프로그래밍

임시 이미지 정재곤
http://www.boostcourse.org/mo316/notice/2614
좋아요 1436 수강생 20099
아래의 글은 BOOSTER 서포터즈로 활동했던 김구라니(rbfks1***)님이
작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
1)링크: https://blog.naver.com/rbfks1221/221810654986

2)작성날짜: 20/02/16
<본문내용>

1. 레이아웃 만들기

8. 드로어블 만들기

[부스트코스] 안드로이드 프로그래밍

2) 쉐이프 드로어블

[LECTURE] 2) 쉐이프 드로어블 : edwith

들어가기 전에 쉐이프 드로어블을 사용하면 XML을 이용해 도형을 그릴 수 있습니다. 도형을 그리려면 원래 소스 코드에서 캔버스(Canvas)라는 객체를 이용해야 하지만 쉐이프 드로... - 부스트코스

www.edwith.org


들어가기 전에

쉐이프 드로어블을 사용하면 XML을 이용해 도형을 그릴 수 있습니다.

도형을 그리려면 원래 소스 코드에서 캔버스(Canvas)라는 객체를 이용해야 하지만 쉐이프 드로어블을 사용하면 소스 코드 없이 도형을 그려 보여줄 수 있으니 여러 가지 장점이 생기게 됩니다.

쉐이프 드로어블을 어떻게 만들 수 있는지 알아봅시다.


학습 목표

1) 쉐이프 드로어블이 무엇인지 이해하고 XML로 만들어봅시다.

2) 쉐이프 드로어블을 이용해 어떤 도형들을 보여줄 수 있는지 설명해봅시다.


핵심 단어

· 드로어블

· ShapeDrawable


학습하기

쉐이프 드로어블(ShpaeDrawable) 이란?

쉐이프(Shape)란, 도형을 뜻하는 단어죠?

따라서 쉐이프 드로어블 XML로 도형을 그릴 수 있는 드로어블이랍니다!

/res/drawable 폴더 안에 Drawable resource file을 만들고,

최상위 태그를 <shape>로 바꾸면 도형을 정의할 수 있어요!

쉐이프 드로어블(ShapeDrawable)의 속성

<shape> 태그 안에는 어떤 속성을 추가할 수 있을까요?

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="200dp" android:height="120dp" /> <stroke android:width="1dp" android:color="#0000ff" /> <solid android:color="#aaddff" /> <padding android:bottom="1dp" /> </shape>

바로, shape 속성이 들어갈 수 있어요.

rectangle로 설정하면 직사각형, oval로 설정하면 타원, line으로 설정하면 선, ring으로 설정하면 고리 모양으로 그릴 수 있답니다!

도형의 테두리 선에 대해 굵기나 색상을 지정할 수도 있고 도형을 채우는 색상을 지정할 수도 있는데요!

<shape> 태그 안에 <stroke> 태그넣어서 테두리 선의 속성을 지정할 수 있습니다.

또 그 안에는 선의 굵기를 설정하는 width 속성, 선의 색상을 설정하는 color 속성을 추가할 수 있어요.

<shape> 태그 안에는 <solid> 태그도 넣을 수 있는데요!

<solid> 태그는 도형의 안쪽을 채울 때 사용합니다.

그렇다면 배경에 그라데이션을 줄 수 있는 방법이 있을까요?

바로, <gradient> 태그를 사용하면 가능하답니다!

<shape> 태그 안에 <gradient> 태그를 넣으면 그러데이션이 만들어지게 됩니다.

startColor 속성으로 시작 부분의 색상, centerColor 속성으로 가운데 부분의 색상, endColor 속성으로 끝부분의 색상을 지정할 수 있습니다.

위쪽에서부터 아래쪽으로 내려오면서 색상이 바뀌는 모양이 되는 거죠!

테두리만 있는 버튼 배경

<layer-list> 태그를 사용하면 여러 그래픽을 하나의 XML 파일에 넣을 수 있습니다.

<layout-list> 태그 안에는 <item> 태그가 여러 개 들어갈 수 있어요!

또, <item> 태그 안에는 <shape> 태그가 들어갈 수 있으니 각각을 도형으로 정의할 수도 있겠죠?

만약 버튼의 테두리만 보이게 하는 드로어블을 만들고 싶다면 어떻게 해야 할까요?

바로, 도형 안쪽을 투명하게 채우고 테두리 선만 색상을 주면 됩니다!

2개의 그래픽을 중첩시킨 모습

조금만 더 생각해보면, 이것을 두 개의 그래픽으로 정의할 수도 있겠죠?

하나의 그래픽으로 정의할 것인지, 여러 개의 그래픽으로 정의할 것인지는 선택의 문제이지만 여러 개의 그래픽으로 나누면 그래픽을 중첩시켜서 좀 더 예쁜 배경을 만들 수 있답니다!

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#BE55DA" /> <solid android:color="#00000000" /> </shape> </item> <item android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#BE55DA" /> <solid android:color="#00000000" /> </shape> </item> </layer-list>

생각해보기

1. 버튼의 테두리를 쉐이프 드로어블로 만들어 사용하면 포토샵으로 디자인한 버튼 배경 이미지를 사용하는 것에 비해 어떤 장점이 생길까요?

먼저, 별도의 툴로 디자인한 이미지를 배경으로 쓸 때 보다 수정이 편리해질 거예요.

그리고 버튼의 크기가 늘어나면 이미지 배경은 깨질 수도 있는데요. 이런 문제점을 방지할 수 있습니다!

2. 여러 종류의 쉐이프 드로어블을 만들고 그중 하나를 화면에 들어있는 버튼들의 배경으로 설정할 수 있습니다. 이 상태에서 사용자가 여러 종류 중 하나를 선택하면 화면에 있는 모든 버튼의 배경을 바꾸도록 만들 수 있을까요? 이렇게 하면 버튼의 배경 스타일을 한꺼번에 바꾸는 효과가 있을까요?

네. 가능합니다!

버튼에 클릭 리스너를 달고 클릭 이벤트가 발생했을 때 모든 버튼들의 배경을 바꾸도록 구현하면 가능할 것 같아요!


이렇게 안드로이드 프로그래밍 첫 번째 프로젝트의 모든 강좌들을 살펴봤는데요.

다음 포스팅에서는 부스트코스 코드 리뷰를 받는 방법과 두 번째 프로젝트의 강좌 중 테이블 레이아웃에 대해 알아보도록 할게요!

 

*********************************************