Skip to content

Most visited

Recently visited

navigation

ドローアブル リソース

関連ドキュメント

  1. 2D グラフィック
  2. Vector Asset Studio

ドローアブル リソースとは、一般的に画面上に描画するグラフィックのことであり、getDrawable(int) などの API で取得できるものや、android:drawableandroid:icon などの属性で別の XML リソースに適用するものがあります。ドローアブルには複数のタイプがあります。

ビットマップ ファイル
ビットマップ グラフフィック ファイル(.png.jpg.gif)。BitmapDrawable を作成します。
9-patch ファイル
拡大できる領域をもつ PNG ファイルで、コンテンツに応じて画像のサイズを変更できます(.9.png)。NinePatchDrawable を作成します。
レイヤリスト
その他のドローアブル配列を管理するドローアブル。配列順に描画されるので、インデックスの大きい要素が最前面に描画されます。LayerDrawable を作成します。
状態リスト
状態の変化に合わせて別々のビットマップ グラフィックを参照する XML ファイル(ボタンのクリック時に別の画像を使用するなど)。StateListDrawable を作成します。
レベルリスト
切り替え可能な複数のドローアブルを管理するドローアブルを定義する XML ファイル。各ドローアブルには最大値が指定されます。LevelListDrawable を作成します。
トランジション ドローアブル
2 つのドローアブル リソース間をクロスフェードできるドローアブルを定義する XML ファイル。TransitionDrawable を作成します。
インセット ドローアブル
指定の距離で別のドローアブルを挿入するドローアブルを定義する XML ファイル。ビューが、それ自体の領域よりも小さいバックグラウンド ドローアブルを必要とする場合に便利です。
クリップ ドローアブル
ドローアブルの現在のレベル値に応じて別のドローアブルを切り取るドローアブルを定義する XML ファイル。ClipDrawable を作成します。
スケール ドローアブル
ドローアブルの現在のレベル値に応じて別のドローアブルのサイズを変更するドローアブルを定義する XML ファイル。ScaleDrawable を作成します。
シェイプ ドローアブル
色やグラデーションなどを含む図形を定義する XML ファイル。ShapeDrawable を作成します。

AnimationDrawable の作成方法については、アニメーション リソース ドキュメントも参照してください。

注: XML 内では、カラーリソースもドローアブルとして使えます。たとえば 状態リストのドローアブルを作成する際は、android:drawable 属性用にカラーリソースを参照できます(android:drawable="@color/green")。

ビットマップ

ビットマップ画像Android は次の 3 形式のビットマップ ファイルをサポートします。.png(推奨)、.jpg(許容)、.gif(非推奨) です。

ファイル名をリソース ID として使用するか、XML 内でエイリアス ID を作成すれば、ビットマップ ファイルを直接参照できます。

注: ビットマップファイルは、ビルド中に aapt ツールを使用した画像の可逆圧縮によって、自動的に最適化される場合があります。たとえば、256 色以上を必要としないトゥルーカラーの PNG を、カラーパレットを使って 8-bit PNG に変換可能です。結果として、より少ないメモリで同等の画質が得られます。このディレクトリ内のイメージ バイナリは、ビルド中に変化する可能性があることにご注意ください。ビットマップに変換するために画像をビット ストリームとして読み込もうとする場合には、最適化を避けるために res/raw/ フォルダに画像を移してください。

ビットマップ ファイル

ビットマップ ファイルとは .png.jpg.gif 形式のファイルです。これらのファイルを res/drawable/ ディレクトリに保存すると、Android はDrawable リソースを生成します。

ファイルの場所:
res/drawable/filename.png.png.jpg.gif
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
BitmapDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
例:
res/drawable/myimage.png に保存された画像を使って、レイアウト XML で画像をビューに適用します。
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

以下のアプリケーション コードでは、画像を Drawable として読み込みます。

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);
関連ドキュメント:

XML ビットマップ

XML ビットマップは、ビットマップファイルを参照する XML 内で定義されたリソースです。処理前のビットマップファイルのエイリアスとして機能します。XML ではディザリングやタイリングなどのビットマップ用の追加プロパティを指定できます。

注: <bitmap> 要素を <item> の子要素として使えます。たとえば、状態リストレイヤリストを作成する場合、android:drawable 属性を <item> 要素から除外し、その中に <bitmap> をネストすることでドローアブル アイテムを定義します。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
BitmapDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
要素:
<bitmap>
ビットマップの元画像と属性を定義します。

属性:

xmlns:android
文字列。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。<bitmap> がルート要素である場合にのみ必要であり、<bitmap><item> にネストされていれる場合は不要です。
android:src
ドローアブル リソース。必須。ドローアブル リソースを参照します。
android:antialias
ブール値。 アンチエイリアシングを有効または無効にします。
android:dither
ブール値。ビットマップが画面と同じピクセル設定でない場合(RGB565 の画面に対して ARGB 8888 のビットマップなど)、ビットマップのディザリングを有効または無効にします。
android:filter
ブール値。ビットマップ フィルタリングを有効または無効にします。フィルタリングを使うと、ビットマップの伸縮時に見た目が滑らかになります。
android:gravity
キーワード。ビットマップのグラビティを定義します。ビットマップがコンテナより小さい場合、コンテナ内のドローアブルの配置をグラビティで指定します。

次の定数値のどれか 1 つ以上(「|」で区切られる)を含まなければなりません。

説明
top オブジェクトのサイズを変えずに、コンテナの上部に配置します。
bottom オブジェクトのサイズを変えずに、コンテナの下部に配置します。
left オブジェクトのサイズを変えずに、コンテナの左端に配置します。
right オブジェクトのサイズを変えずに、コンテナの右端に配置します。
center_vertical オブジェクトのサイズを変えずに、コンテナの上下中央に配置します。
fill_vertical オブジェクトの高さがコンテナのサイズに合うよう拡大します。
center_horizontal オブジェクトのサイズを変えずに、コンテナの左右中央に配置します。
fill_horizontal オブジェクトの幅がコンテナのサイズに合うよう拡大します。
center オブジェクトのサイズを変えずに、コンテナの上下左右中央に配置します。
fill オブジェクトの高さおよび幅がコンテナのサイズに合うよう拡大します。この値がデフォルトです。
clip_vertical top / bottom の追加オプションとして、オブジェクトの上部 / 下部の境界をコンテナの境界に合わせて切り取ります。切り取りは垂直方向のグラビティを基準とします。top グラビティの場合は下端を、bottom グラビティの場合は上端を切り取るため、両端が同時に切り取られることはありません。
clip_horizontal left / right の追加オプションとして、オブジェクトの左端 / 右端の境界をコンテナの境界に合わせて切り取ります。切り取りは水平方向のグラビティを基準とします。left グラビティの場合は右端を、right グラビティの場合は左端を切り取るため、両端が同時に切り取られることはありません。
android:mipMap
ブール値。ミップマップのヒントを有効または無効にします。詳細は setHasMipMap() をご覧ください。デフォルトは false です。
android:tileMode
キーワード。タイル モードを定義します。タイル モードが有効になっている場合には、ビットマップが繰り返され、グラビティは無視されます。

次のいずれかの定数値でなければなりません。

説明
disabled ビットマップをタイル表示しません。この値がデフォルトです。
clamp オリジナルの境界を超えてシェーダーが描画した場合に、端の色で反復します。
repeat シェーダーの画像を水平および垂直方向に繰り返します。
mirror シェーダーの画像と鏡面画像とを交互に、水平及び垂直方向に繰り返し、 隣接する画像が必ずつながるようにします。
例:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
関連ドキュメント:

9-patch

NinePatch はビュー内のコンテンツが通常の画像範囲を超えた場合に、Android によって伸縮する領域を定義できる PNG 画像です。通常、"wrap_content" に 1 つ以上の配置指定がされたビューの背景としてこのタイプの画像を指定します。また、ビューがコンテンツを収容できるほど拡大した場合、9-patch 画像もビューのサイズに合わせて引き伸ばされます。9-patch 画像を使用する例としては、Android の標準 Button ウィジェットで使用される背景があります。この場合ボタン内のテキスト(または画像)が中に収まるよう拡大する必要があります。

通常の ビットマップ 同様、9-patch ファイルを直接あるいは、XML で定義されたリソースから参照できます。

伸縮可能な領域を指定して 9-patch ファイルを作成する方法の詳細については、2D グラフィック ドキュメントをご参照ください。

9-patch ファイル

ファイルの場所:
res/drawable/filename.9.png
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
NinePatchDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
例:
res/drawable/myninepatch.9.png に保存された画像を使って、レイアウト XML で 9-patch をビューに適用します。
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
関連ドキュメント:

XML 9-patch

XML 9-patch は、Nine-Patch ファイルを参照する XML 内で定義されたリソースです。XML で、画像に施すディザリングを指定できます。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
NinePatchDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />
要素:
<nine-patch>
9-Patch の元画像と属性を定義します。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
android:src
ドローアブル リソース。必須。Nine-Patch ファイルを参照します。
android:dither
ブール値。ビットマップが画面と同じピクセル設定でない場合(RGB565 の画面に対して ARGB 8888 のビットマップなど)、ビットマップのディザリングを有効または無効にします。
例:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

レイヤリスト

LayerDrawable は他のドローアブル配列を管理するドローアブル オブジェクトです。リスト内のドローアブルは配列順に描画されるので、リストの最後にあるドローアブルが最前面に描画されます。

各ドローアブルは、1 つの <layer-list> 要素内にある <item> 要素で表されます。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
LayerDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>
要素:
<layer-list>
必須。ルート要素でなければなりません。1 つ以上の <item> 要素を含みます。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
<item>
属性で定義された位置で、レイヤ ドローアブル内に配置するドローアブルを定義します。<selector> 要素の子要素でなければなりません。子要素として <bitmap> を使用できます。

属性:

android:drawable
ドローアブル リソース。必須。ドローアブル リソースを参照します。
android:id
リソース ID。このドローアブルの一意なリソース IDこのアイテム用にリソース ID を新規作成するには、"@+id/name" の形式を使用します。プラス記号は、新規 ID として作成する必要があることを意味します。この ID を使用してドローアブルを取得、変更するには View.findViewById() または Activity.findViewById() を使います。
android:top
整数。ピクセル単位で指定した上部のオフセット。
android:right
整数。ピクセル単位で指定した右部のオフセット。
android:bottom
整数。ピクセル単位で指定した下部のオフセット。
android:left
整数。ピクセル単位で指定した左部のオフセット。

デフォルトで、すべてのドローアブル アイテムはそれを含むビューのサイズに合わせてスケールされます。そのため、レイヤリスト内の画像を異なる場所に置くと、ビューのサイズが大きくなり、その中の画像のサイズも調整される可能性があります。リスト内のアイテムのスケーリングを行わないようにするには、<item> 要素内の <bitmap> 要素を使ってドローアブルを指定し、"center" などのようにスケールを行わないようグラビティを指定します。たとえば、以下の <item> はコンテナのビューに合わせてスケールするアイテムを指定しています。

<item android:drawable="@drawable/image" />

次の例では、<bitmap> 要素を使って center グラビティを指定することで、スケールを行わないようにしています。

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>
例:
res/drawable/layers.xml に保存された XML ファイル:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

この例では、ネストされた <bitmap> 要素を使って、center グラビティを指定した各アイテムのドローアブル リソースを定義している点に注目してください。このようにすると、画像のオフセットによるサイズ変更で、コンテナのサイズに合わせて画像サイズが調整されることはありません。

以下のレイアウト XML でドローアブルをビューに適用します。

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

オフセットを増加させて画像を重ねると、以下のようになります。

関連ドキュメント:

状態リスト

StateListDrawable は XML 内に定義されるドローアブル オブジェクトで、オブジェクトの状態に応じて、同一のグラフィックに異なる画像を使用します。たとえば、Button ウィジェットは複数の状態(押下状態、フォーカス状態、どちらでもない状態)をとりますが、状態リストのドローアブルを使用すると、状態に応じて異なる背景画像を使うことが可能です。

状態リストは XML ファイル内に記載できます。それぞれのグラフィックは、1 つの <selector> 要素内にある <item> 要素で表されます。各 <item> では、様々な属性を使用してドローアブル用のグラフィックを使用する状態を指定します。

状態が変化すると、リストを上から順に評価して、現在の状態に一致する最初のアイテムを使用します。つまり、適用するのはベストマッチするものではなく、その状態の最低限の基準を満たす最初のアイテムです。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
StateListDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?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>
要素:
<selector>
必須。ルート要素でなければなりません。1 つ以上の <item> 要素を含みます。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
android:constantSize
ブール値。ドローアブルで、状態が変わっても内部サイズを一定(全状態の中で最大のサイズ)にするよう指定している場合は true を、現在の状態に応じてサイズを変更する場合は false を指定します。デフォルトは false です。
android:dither
ブール値。ビットマップが画面と同じピクセル設定でない場合(RGB565 の画面に対して ARGB 8888 ビットマップなど)、ビットマップのディザリングを有効にするには true を、無効にするには false を指定します。デフォルトは true です。
android:variablePadding
ブール値。現在の選択状態に応じてドローアブルのパディングを変更する必要がある場合は true、パディングを変更しない(全状態の中で最大のパディングを基準にする)場合は false を指定します。この機能を有効にするには、通常とは異なり、状態が変化したらレイアウトを実行する必要があります。デフォルトは false です。
<item>
属性で指定された任意の状態において使用するドローアブルを定義します。<selector> 要素の子要素でなければなりません。

属性:

android:drawable
ドローアブル リソース。必須。ドローアブル リソースを参照します。
android:state_pressed
ブール値。オブジェクトが選択された状態(ボタンをタップやクリックしたときなど)で使用するアイテムには true を、押されていないデフォルトの状態で使用するアイテムには false を指定します。
android:state_focused
ブール値。オブジェクトに入力フォーカスがあたっている状態(ユーザーがテキスト入力を選択したときなど)で使用するアイテムには true を、フォーカスのあたっていないデフォルトの状態で使用するアイテムには false を指定します。
android:state_hovered
ブール値。カーソルのホバー状態で使用するアイテムには true を、非ホバー状態で使用するアイテムには false を指定します。このドローアブルは、フォーカスされた状態で使うドローアブルと同じである場合が多くあります。

API レベル 14 で追加。

android:state_selected
ブール値。ユーザーが十字キーなどを操作して、オブジェクトが選択状態にあるとき(D-pad を使ったリスト操作中など)に使用するアイテムには true を、オブジェクトを選択されていない状態で使用するアイテムには false を指定します。

この選択状態は、フォーカス(android:state_focused)では十分でない場合(リスト ビューにフォーカスがあたった状態で、その中のアイテムが D-pad で選択されている場合など)に使用します。

android:state_checkable
ブール値。オブジェクトがチェック可能なときに使用するアイテムには true を、チェックできない状態で使用するアイテムには false を指定します。(オブジェクトがチェック可能とチェック不可能なウィジェット間を遷移できる場合のみ有用です)。
android:state_checked
ブール値。オブジェクトがチェックされた状態で使用するアイテムには true を、チェックされていない状態で使用するアイテムには false を指定します。
android:state_enabled
ブール値。オブジェクトが有効になっている(タップやクリック イベントを受け付ける)状態で使用するアイテムには true を、無効になっている状態で使用するアイテムには false を指定します。
android:state_activated
ブール値。オブジェクトが継続的に選択された状態でアクティブになっているとき(継続的なナビゲーション ビューで一つ前に選択されたアイテムをハイライト表示する場合など)に使用するアイテムには true を、そうでない状態で使用するアイテムには false を指定します。

API レベル 11 で追加。

android:state_window_focused
ブール値。アプリケーション ウィンドウのフォーカス時(アプリがフォアグラウンドに表示されている状態)に使用するアイテムには true を、フォーカスされていない状態(通知シェードがプルダウンされていたりダイアログが表示されている状態など)で使用するアイテムには false を指定します。

注: Android では、状態リスト上で、オブジェクトの現在の状態に一致する最初のアイテムを適用する点に注意してください。つまり、リストの最初にあるアイテムが上記のどの状態属性も含まない場合、毎回そのアイテムが適用されることになります。そのため、デフォルト値は常に最後に指定する必要があります(以下の例をご覧ください)。

例:
res/drawable/button.xml に保存された XML ファイル:
<?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/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

以下のレイアウト XML で状態リストのドローアブルをボタンに適用します。

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
関連ドキュメント:

レベルリスト

切り替え可能な複数のドローアブルを管理するドローアブルで、各ドローアブルには最大値が指定されます。setLevel() でドローアブルのレベル値を設定すると、このメソッドに渡された値より大きい、または等しい android:maxLevel 値を持つドローアブル リソースが読み込まれます。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
LevelListDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>
要素:
<level-list>
ルート要素でなければなりません。1 つ以上の <item> 要素を含みます。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
<item>
特定のレベルで使用するドローアブルを定義します。

属性:

android:drawable
ドローアブル リソース。必須。挿入するドローアブル リソースを参照します。
android:maxLevel
整数。この アイテムが許可する最大レベル。
android:minLevel
整数。この アイテムが許可する最小レベル。
例:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

View に割り当てた後は、setLevel() またはsetImageLevel() でレベルを変更できます。

関連ドキュメント:

トランジション ドローアブル

TransitionDrawable は、2 つのドローアブル リソース間をクロスフェイドできるドローアブル オブジェクトです。

各ドローアブルは、1 つの <transition> 要素内にある <item> 要素で表されます。3 つ以上のアイテムはサポートされません。次のドローアブルに遷移するには、startTransition() を呼び出します。遷移を元に戻すには、reverseTransition() を呼び出します。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
TransitionDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>
要素:
<transition>
必須。ルート要素でなければなりません。1 つ以上の <item> 要素を含みます。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
<item>
ドローアブル遷移で使用するドローアブルを定義します。<transition> 要素の子要素でなければりません。子要素として <bitmap> を使用できます。

属性:

android:drawable
ドローアブル リソース。必須。ドローアブル リソースを参照します。
android:id
リソース ID。このドローアブルの一意なリソース IDこのアイテム用にリソース ID を新規作成するには、"@+id/name" の形式を使用します。プラス記号は、新規 ID として作成する必要があることを意味します。この ID を使用してドローアブルを取得、変更するには View.findViewById() または Activity.findViewById() を使います。
android:top
整数。ピクセル単位で指定した上部のオフセット。
android:right
整数。ピクセル単位で指定した右部のオフセット。
android:bottom
整数。ピクセル単位で指定した下部のオフセット。
android:left
整数。ピクセル単位で指定した左部のオフセット。
例:
res/drawable/transition.xml に保存された XML ファイル:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

以下のレイアウト XML でドローアブルをビューに適用します。

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

次のコードでは、1 つ目のアイテムから 2 つ目のアイテムの間に 500 ミリ秒かけて遷移します。

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);
関連ドキュメント:

インセット ドローアブル

XML 内に定義され、指定の距離で別のドローアブルを挿入するドローアブルです。ビューが、それ自体の領域よりも小さいバックグラウンドを必要とする場合に便利です。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
InsetDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />
要素:
<inset>
インセット ドローアブルを定義します。ルート要素でなければなりません。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
android:drawable
ドローアブル リソース。必須。挿入するドローアブル リソースを参照します。
android:insetTop
ディメンション。上部に挿入。ディメンション値またはディメンション リソースで指定します。
android:insetRight
ディメンション。右部に挿入。ディメンション値またはディメンション リソースで指定します。
android:insetBottom
ディメンション。下部に挿入。ディメンション値またはディメンション リソースで指定します。
android:insetLeft
ディメンション。左部に挿入。ディメンション値またはディメンション リソースで指定します。
例:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />
関連ドキュメント:

クリップ ドローアブル

XML 内で定義され、ドローアブルの現在のレベル値に応じて別のドローアブルを切り取るドローアブルです。レベルに基づいて子ドローアブルをどの程度の幅や高さで切り取るか、同様にグラビティーに基づいて子ドローアブルをコンテナ全体のどの位置に配置するかを制御します。進捗バーなどを実装する際に多く使われます。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
ClipDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
要素:
<clip>
クリップ ドローアブルを定義します。ルート要素でなければなりません。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
android:drawable
ドローアブル リソース。必須。切り取るドローアブル リソースを参照します。
android:clipOrientation
キーワード。切り取る際の画面の向き。

次のいずれかの定数値でなければなりません。

説明
horizontal ドローアブルを水平方向に切り取ります。
vertical ドローアブルを垂直方向に切り取ります。
android:gravity
キーワード。ドローアブルのどこを切り取るかを指定します。

次の定数値のどれか 1 つ以上(「|」で区切られる)を含まなければなりません。

説明
top オブジェクトのサイズを変えずに、コンテナの上部に配置します。clipOrientation"vertical" である場合、ドローアブルの下側を切り取ります。
bottom オブジェクトのサイズを変えずに、コンテナの下部に配置します。clipOrientation"vertical" である場合、ドローアブルの上側を切り取ります。
left オブジェクトのサイズを変えずに、コンテナの左端に配置します。この値がデフォルトです。clipOrientation"horizontal" である場合、ドローアブルの右側を切り取ります。この値がデフォルトです。
right オブジェクトのサイズを変えずに、コンテナの右端に配置します。clipOrientation"horizontal" である場合、ドドローアブルの左側を切り取ります。
center_vertical オブジェクトのサイズを変えずに、コンテナの上下中央に配置します。グラビティが "center" の場合と同じように切り取ります。
fill_vertical オブジェクトの高さがコンテナのサイズに合うよう拡大します。clipOrientation"vertical" である場合は、ドローアブルは垂直方向の空間を埋めるように表示されるため、切り取りは発生しません(ただし、ドローアブル レベルが 0 で非表示の場合を除く)。
center_horizontal オブジェクトのサイズを変えずに、コンテナの左右中央に配置します。グラビティが "center" の場合と同じように切り取ります。
fill_horizontal オブジェクトの幅がコンテナのサイズに合うよう拡大します。clipOrientation"horizontal" である場合、ドローアブルが水平方向の空間を埋めるように表示されるため、切り取りは発生しません(ただし、ドローアブル レベルが 0 で非表示の場合を除く)。
center オブジェクトのサイズを変えずに、コンテナの上下左右中央に配置します。clipOrientation"horizontal" である場合、右側と左側を切り取ります。clipOrientation"vertical" である場合、上側と下側を切り取ります。
fill オブジェクトの高さおよび幅がコンテナのサイズに合うよう拡大します。ドローアブルが垂直および水平方向の空間を埋めるように表示されるため、切り取りは発生しません(ただし、ドローアブル レベルが 0 で非表示の場合を除く)。
clip_vertical top / bottom の追加オプションとして、オブジェクトの上部 / 下部の境界をコンテナの境界に合わせて切り取ります。切り取りは垂直方向のグラビティを基準とします。top グラビティの場合は下端を、bottom グラビティの場合は上端を切り取るため、両端が同時に切り取られることはありません。
clip_horizontal left / right の追加オプションとして、オブジェクトの左端 / 右端の境界をコンテナの境界に合わせて切り取ります。切り取りは水平方向のグラビティを基準とします。left グラビティの場合は右端を、right グラビティの場合は左端を切り取るため、両端が同時に切り取られることはありません。
例:
res/drawable/clip.xml に保存された XML ファイル:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

次のレイアウト XML でクリップ ドローアブルをビューに適用します。

<ImageView
    android:id="@+id/image"
    android:background="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

次のコードではドローアブルを取得し、切り取りのレベルを上げることで、画像が少しずつ見えるようにしています。

ImageView imageview = (ImageView) findViewById(R.id.image);
ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();
drawable.setLevel(drawable.getLevel() + 1000);

レベルを上げると、切り取る量が減るため、画像が少しずつ表示されます。これはレベル 7000 の状態です。

注: デフォルトは 0 です。全体が切り取られているため画像は見えません。レベルが 10,000 になると、画像は切り取られないため完全に表示されます。

関連ドキュメント:

スケール ドローアブル

XML 内で定義され、ドローアブルの現在のレベル値に応じて別のドローアブルのサイズを変更するドローアブル。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
ScaleDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />
要素:
<scale>
スケール ドローアブルを定義します。ルート要素でなければなりません。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
android:drawable
ドローアブル リソース。必須。ドローアブル リソースを参照します。
android:scaleGravity
キーワード。スケール後のグラビティの位置を指定します。

次の定数値のどれか 1 つ以上(「|」で区切られる)を含まなければなりません。

説明
top オブジェクトのサイズを変えずに、コンテナの上部に配置します。
bottom オブジェクトのサイズを変えずに、コンテナの下部に配置します。
left オブジェクトのサイズを変えずに、コンテナの左端に配置します。この値がデフォルトです。
right オブジェクトのサイズを変えずに、コンテナの右端に配置します。
center_vertical オブジェクトのサイズを変えずに、コンテナの上下中央に配置します。
fill_vertical オブジェクトの高さがコンテナのサイズに合うよう拡大します。
center_horizontal オブジェクトのサイズを変えずに、コンテナの左右中央に配置します。
fill_horizontal オブジェクトの幅がコンテナのサイズに合うよう拡大します。
center オブジェクトのサイズを変えずに、コンテナの上下左右中央に配置します。
fill オブジェクトの高さおよび幅がコンテナのサイズに合うよう拡大します。
clip_vertical top / bottom の追加オプションとして、オブジェクトの上部 / 下部の境界をコンテナの境界に合わせて切り取ります。切り取りは垂直方向のグラビティを基準とします。top グラビティの場合は下端を、bottom グラビティの場合は上端を切り取るため、両端が同時に切り取られることはありません。
clip_horizontal left / right の追加オプションとして、オブジェクトの左端 / 右端の境界をコンテナの境界に合わせて切り取ります。切り取りは水平方向のグラビティを基準とします。left グラビティの場合は右端を、right グラビティの場合は左端を切り取るため、両端が同時に切り取られることはありません。
android:scaleHeight
パーセンテージ。スケールする高さをドローアブルの範囲に対する割合で指定します。値の形式は XX% とします。例:100%、12.5%、など。
android:scaleWidth
パーセンテージ。スケールする幅をドローアブルの範囲に対する割合で指定します。値の形式は XX% とします。例:100%、12.5%、など。
例:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />
関連ドキュメント:

シェイプ ドローアブル

XML 内で定義される一般的な図形です。

ファイルの場所:
res/drawable/filename.xml
ファイル名はリソース ID として使用されます。
コンパイルされるリソースのデータ型:
GradientDrawable へのリソース ポインタ。
リソースの参照:
Java の場合: R.drawable.filename
XML の場合: @[package:]drawable/filename
構文:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>
要素:
<shape>
スケール ドローアブル。ルート要素でなければなりません。

属性:

xmlns:android
文字列。必須。XML 名前空間を "http://schemas.android.com/apk/res/android" として定義します。
android:shape
キーワード。図形タイプを定義します。有効な値は次のとおりです。
説明
"rectangle" コンテナ ビューを埋める四角形。これはデフォルトの図形です。
"oval" コンテナ ビューのディメンションに合わせた楕円形。
"line" コンテナ ビューの幅と同じ長さの水平線。この図形には線の太さを指定する <stroke> 要素が必要です。
"ring" 同心円。

android:shape="ring" の場合に限り、次の属性を使用できます。

android:innerRadius
ディメンション。内側の円の半径(中央の穴の部分)をディメンション値またはディメンション リソースで指定します。
android:innerRadiusRatio
浮動小数。内円の半径をリングの幅の比で指定します。たとえば、android:innerRadiusRatio="5" の場合、内側の半径はリングの幅を 5 で割った値になります。ただし、この値は android:innerRadius が指定された場合には上書きされます。デフォルト値は 9 です。
android:thickness
ディメンション。リングの厚さをディメンション値またはディメンション リソースで指定します。
android:thicknessRatio
浮動小数。リングの厚さをリングの幅の比で指定します。たとえば、android:thicknessRatio="2" の場合、厚さはリングの幅を 2 で割った値になります。ただし、この値は android:innerRadius が指定された場合には上書きされます。デフォルト値は 3 です。
android:useLevel
ブール値。LevelListDrawable として使用する場合には true を指定します。通常は false に指定します。そうでない場合は図形が表示されません。
<corners>
図形の角を丸くします。四角形にのみ適用できます。

属性:

android:radius
ディメンション。すべての角の半径を、ディメンション値またはディメンション リソースで指定します。以下の属性を使用して個別に指定している場合は、そちらが優先されます。
android:topLeftRadius
ディメンション。左上角の半径を、ディメンション値またはディメンション リソースで指定します。
android:topRightRadius
ディメンション。右上角の半径を、ディメンション値またはディメンション リソースで指定します。
android:bottomLeftRadius
ディメンション。左下角の半径を、ディメンション値またはディメンション リソースで指定します。
android:bottomRightRadius
ディメンション。右下角の半径を、ディメンション値またはディメンション リソースで指定します。

注: 角を丸くするには、どの角も(最初は)半径が 1 より大きい必要があります。特定の角だけを丸くしたくない場合は、回避策として android:radius で 1 より大きい角半径をデフォルトとして設定した後に、それぞれの角を変更したい値で上書きします。丸くしたくない角にはゼロ(0dp)を指定します。

<gradient>
図形のグラデーション色を指定します。

属性:

android:angle
整数。グラデーションの角度(度数で指定)。0 は左から右方向、90 は下から上方向。45 の倍数でなければなりません。デフォルトは 0 です。
android:centerX
浮動小数。グラデーションの中心の相対 X 座標(0 - 1.0)。
android:centerY
浮動小数。グラデーションの中心の相対 Y 座標(0 - 1.0)。
android:centerColor
色。グラデーションの開始色と終了色の間の中間色を、16 進値またはカラーリソースで指定します(任意)。
android:endColor
色。終了色を 16 進値またはカラーリソースで指定します。
android:gradientRadius
浮動小数。グラデーションの半径。android:type="radial" の場合にのみ適用されます。
android:startColor
色。開始色を 16 進値またはカラーリソースで指定します。
android:type
キーワード。適用するグラデーションのパターンのタイプ。有効な値は次のとおりです。
説明
"linear" 直線グラデーション。この値がデフォルトです。
"radial" 放射状のグラデーション。開始色が中心の色になります。
"sweep" 円形のグラデーション。
android:useLevel
ブール値。LevelListDrawable として使用する場合には true を指定します。
<padding>
コンテナ ビュー要素に適用するパディング(図形ではなく、ビュー コンテンツの位置にパディングを入れます)。

属性:

android:left
ディメンション。左側のパディングをディメンション値またはディメンション リソースで指定します。
android:top
ディメンション。上側のパディングをディメンション値またはディメンション リソースで指定します。
android:right
ディメンション。右側のパディングをディメンション値またはディメンション リソースで指定します。
android:bottom
ディメンション。下側のパディングをディメンション値またはディメンション リソースで指定します。
<size>
図形のサイズ。

属性:

android:height
ディメンション。図形の高さをディメンション値またはディメンション リソースで指定します。
android:width
ディメンション。図形の幅をディメンション値またはディメンション リソースで指定します。

注: デフォルトで、図形はここで指定されたディメンションに合わせて、コンテナ ビューのサイズまでスケールされます。ImageView 内で図形を使う場合には、android:scaleType"center" に設定することでスケーリングを防止できます。

<solid>
図形に使用する単色。

属性:

android:color
色。図形に適用する色を 16 進値またはカラーリソースで指定します。
<stroke>
図形の枠線。

属性:

android:width
ディメンション。線の太さをディメンション値またはディメンション リソースで指定します。
android:color
色。線の色を 16 進値またはカラー リソースで指定します。
android:dashGap
ディメンション。破線の線と線の間隔をディメンション値またはディメンション リソースで指定します。android:dashWidth が設定されている場合に限り有効です。
android:dashWidth
ディメンション。破線の各線の長さをディメンション値またはディメンション リソースで指定します。android:dashGap が設定されている場合に限り有効です。
例:
res/drawable/gradient_box.xml に保存された XML ファイル:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

次のレイアウト XML で図形ドローアブルをビューに適用します。

<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

このアプリケーション コードでシェイプ ドローアブルを取得して、ビューに適用します。

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);
関連ドキュメント:
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)