안드로이드용 모바일 어플리케이션을 개발하다보면,
리스소 파일들이 어플리케이션 용량의 대부분을 차지하는 경우를 볼 수 있습니다.
이런경우에 리소스 파일들의 용량을 줄일 수 있는 방법으로 9.patch를 사용합니다.
1. 리소스 파일이름
리소스 이미지 파일이름은 파일이름.9.png 등으로 지정합니다.
실제 사용시에는 파일이름만 가지고 사용하면 됩니다.
ex) android:backgroudn="@drawable/파일이름"
2. 이미지 구성
이미지는 약간의 포토샵의 작업이 필요합니다.
까만 점을 사용해서 늘어나는(그 부분만 확장하기 때문에 늘어나는 이라고 표현) 부분을 지정할 수 있습니다.
또 까만 점을 사용해서 채워질(padding)부분을 지정할 수 있습니다.
위쪽과 왼쪽의 까만점(또는 까만선)은 늘어날 부분을 지정합니다.
오른쪽과 아래쪽의 까만점(또는 까만선)은 채워질 부분을 지정합니다.(오른쪽과 아래는 선택적입니다. optional)
sdk tool에 있는 draw-9-patch 를 사용해서 그려도 되고, 기타 다른 이미지 툴(photoshop 등의)을 사용해도 됩니다.
아래와 같이 실제 크기는 11px * 11px 의 이미지를 만듭니다.
(더 작은 이미지로 만들어도 상관은 없습니다. 하지만 너무 작으면 라운딩처리가 힘들어져서 10 이상은 되야 할듯-_-ㅋ)
그리고 만든 이미지를 아래와 같이 res/drawable 폴더에 추가해 줍니다.
파일 이름은 위에서 말했다시피 파일이름.9.png 의 형식인 background_image.9.png 를 사용했습니다.
그리고 아래와 같이 layout의 xml 파일에 리소스를 background 로 지정합니다.
위에서 말했듯이 사용할때는 .9 는 빼고 파일이름만 가지고 사용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <? xml version = "1.0" encoding = "utf-8" ?> android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" android:background = "@drawable/background_image" > < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "@string/hello" /> </ LinearLayout > |
실제 실행 결과입니다.
이것만 봐서는 .9 patch가 좋은지 안좋은지 알 수 없습니다.
그래서 같은 이미지를 까만색 점 부분을 빼고, 파일이름에서 .9 를 빼고 적용해 보았습니다.
아래는 .9 를 사용하지 않은 실행 결과입니다.
예상대로 이미지가
실제 11px 의 크기에서 위의 xml에 정의된 300dp * 400dp 의 크기로 강제로 늘어나 적용된 것을 볼 수 있습니다.
.9 patch의 중점은 까만색 점 입니다.
이 점(또는 선)이 찍혀 있는 부분만 늘어난다는 것만 명심하면 됩니다.
(양쪽에 찍을 것이므로 양쪽이 매칭되어 점들이 매칭된 한 열, 한 행이 늘어나는 것으로 생각됨, 정확한건 공부를....)
이 방법을 사용하면,
일반적으로 테두리만 있는 배경색을 사용할 경우에 리소스 파일 용량을 어마어마하게 줄일 수 있습니다.
- 참고사항 -
아이폰 개발 시 안드로이드의 nine-patch와 비슷한 것으로는
stretchableImageWithLeftCapWidth:topCapHeight: 메소드가 있습니다.
'Programming > Android' 카테고리의 다른 글
안드로이드 appcompat_v7 (0) | 2014.10.31 |
---|---|
안드로이드 019. Menu 구현하기 (0) | 2014.10.31 |
Handler 사용으로 다음 페이지로 3초후 넘기기 (0) | 2014.10.30 |
인텐트(Intent) 값 넘기고 받기/보내고 받는 방법 (0) | 2014.10.30 |
Theme.AppCompat.Light 리소스를 찾지 못할때~ 해결 방법 (0) | 2014.10.30 |