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 |