[모바일 프로그래밍] 8. Drawable

2023. 11. 9. 01:05·모바일프로그래밍
목차
  1. Drawable
  2. BitmapDrawable
  3. NinePatchDrawable
  4. GradientDrawable
  5. StateListDrawable
  6. LayerDrawable

Drawable

public abstract class Drawable
extends Object
  • "그릴 수 있는 것"에 대한 일반 추상화
  • 다양한 형태를 취할 수 있는 기본 시각적 리소스를 처리하기 위한 일반 API를 제공
    • 예: 비트맵, 나인 패치, 레이어 등.
BitmapDrawable 비트맵 그래픽 파일(PNG, WEBP, JPG, GIF)
NinePatchDrawable 콘텐츠에 따라 이미지 크기를 확장 가능한 영역 존재, PNG 파일(.9.png)
LayerDrawable 배열 순서로 그려진 다른 드로어블 배열을 관리하는 드로어블
StateListDrawable 다양한 상태(예: 버튼 탭)에 대해 다양한 비트맵 그래픽 참조, XML 파일
LevelListDrawable 최대 숫자 값을 갖는 대체 드로어블을 관리하는 드로어블 정의, XML 파일
TransitionDrawable 두 드로어블 리소스 간의 크로스페이딩을 위한 드로어블 정의, XML 파일
InsetDrawable 지정된 거리만큼 다른 드로어블을 삽입하는 드로어블 정의, XML 파일
ClipDrawable 현재 레벨 값에 따라 다른 드로어블을 클립하는 드로어블 정의, XML 파일
ScaleDrawable 레벨 값에 따라 다른 드로어블의 크기를 변경하는 드로어블 정의, XML 파일
GradientDrawable
(Shape drawable)
색상/그라데이션을 포함한 기하학적 모양 정의, XML 파일

 

BitmapDrawable

public class BitmapDrawble
extends Drawable
  • 비트맵을 래핑하고 타일링, 늘리기, 정렬
  • 파일 경로, 입력 스트림, XML 인플레이션, Bitmap 객체에서 BitmapDrawable을 생성
Resources res = getResources();
BitmapDrawable bitmapDrawable = (BitmapDrawable) res.getDrawable(R.drawable.battery_charging);
Drawable drawable1 = res.getDrawable(R.drawable.battery_charging, null);
Drawable drawable2 = res.getDrawable(R.drawable.battery_charging, null);
Drawable drawable3 = Resources Compat.getDrawable(res, R.drawable.battery_charging, tnull);

 

NinePatchDrawable

public class NinePatchDrawable
extends Drawable
  • 사용자가 정의하는 확장 가능한 영역이 있는 크기 조정 가능한 비트맵
  • 특수 형식의 .png 파일로 정의

 

GradientDrawable

public class GradientDrawable
extends Drawable
  • (도형 그리기 가능)
  • 버튼, 배경 등에 대한 색상 그라데이션 존재
    • <shape> 요소를 사용하여 XML 파일에 정의
<gradient
    android:startColor="#7288DB"
    android:centerColor="#3250B4"
    android:endColor="#254095"
    android:angle="90"
    android:centerY="0.5"
/>
<corners android:radius="2dp" />

 

만들어보기

  • /app/res/drawable에 새 XML 파일 만들기
  • 그런 다음 Rectangle_drawable에 대해 아래와 같이 입력
<?xml version="1.0" encoding="utf-8"?>
<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>
  • 또한 상단 레이아웃의 배경으로 Drawable을 할당할 수도 있다.
  • 예: 그라데이션 배경
rectangle_drawable

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/rect_drawable"
android:text="Button"
app:backgroundTint="#00000000"
app:backgroundTintMode="add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
back_drawable

android:background="@drawable/back_drawable"

 

StateListDrawable

public class StaticListDrawable
extends DrawableContainer
  • 단일 Drawable에 여러 그래픽 이미지를 할당하고 표시되는 항목을 문자열 ID 값으로 교체할 수 있다.
    • 예: 버튼 클릭 → 다른 이미지로 변경
  • <selector> 요소를 사용하여 XML 파일에 정의
  • 각 상태 Drawable은 중첩된 <item> 요소에 정의된다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding= ["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered= ["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

 

만들어보기

  • /app/res/drawable에 이미지 추가
  • /app/res/drawable 폴더 선택
  • 마우스 오른쪽 버튼 클릭
  • New > Drawable resource file 선택
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@drawable/finger_pressed" />
    <item android:drawable="@drawable/finger" />
</selector>

 


 

LayerDrawable

public class LayerDrawable
extends Drawable
implements Drawable.Calssback
  • 다른 Drawable 배열을 관리
    • 배열 순서대로 그려지므로 가장 큰 인덱스를 가진 요소가 맨 위에 그려진다.
  • <layer-list> 요소를 사용하여 XML 파일에 정의
    • 레이어의 각 Drawable은 중첩된 <item>에 정의

<?xml version="1.0" encoding="utf-8"?>
<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" />
            <size android:width="200dp" android:height="100dp" />
        </shape>
    </item>

    <item android:top="1dp" android:bottom="1dp"
        android:right="1dp" android:left="1dp">
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#FF55DA" />
            (solid android:color="#00000000" />
        </shape>
    </item>

</layer-list>

 

저작자표시 변경금지 (새창열림)

'모바일프로그래밍' 카테고리의 다른 글

[모바일 프로그래밍] 9. Event  (3) 2023.11.09
[모바일 프로그래밍] 6. Layout  (0) 2023.11.08
[모바일 프로그래밍] 5. View  (0) 2023.11.08
[모바일 프로그래밍] 4. 버튼 기능  (0) 2023.11.08
[모바일 프로그래밍] 3. 안드로이드 스튜디오 설치 및 실행  (0) 2023.09.15
  1. Drawable
  2. BitmapDrawable
  3. NinePatchDrawable
  4. GradientDrawable
  5. StateListDrawable
  6. LayerDrawable
'모바일프로그래밍' 카테고리의 다른 글
  • [모바일 프로그래밍] 9. Event
  • [모바일 프로그래밍] 6. Layout
  • [모바일 프로그래밍] 5. View
  • [모바일 프로그래밍] 4. 버튼 기능
파스텔코랄
파스텔코랄
Developer Blog 📜 Lots of rules and no mercy ✨
슬기로운 개발일지Developer Blog 📜 Lots of rules and no mercy ✨
파스텔코랄
슬기로운 개발일지
파스텔코랄
전체
오늘
어제
  • 스터디
    • 컴퓨터시스템구조
    • 모바일프로그래밍
    • 프로그래밍언어론
    • 운영체제
    • 컴퓨터네트워크
    • 데이터분석
    • 소프트웨어공학
    • 시스템프로그래밍

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • About

링크

공지사항

인기 글

태그

어셈블리어
운영체제
프로그래밍언어론
네트워크

최근 댓글

최근 글

hELLO· Designed By정상우.v4.6.1
파스텔코랄
[모바일 프로그래밍] 8. Drawable
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.