プログラミングトレーニング帳

プログラミング関連で覚えたことを書いていきます。初歩の初歩のようなことばかりですが自分の言葉、頭で理解した文章を書きたいのです。

【android】drawableなリソースを<shape>で定義する

ボタンなどビューの背景に簡単な図形(まる、しかくetc...)を適用したい場合、XMLによって画像を定義することができる。
どんな図形を定義できるか、設定できる値、項目などは公式ページで詳しくまとめられている。
http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

以下のコードは公式ページからの引用

    <?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="integer"
            android:centerY="integer"
            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

親となる要素。ここで図形の種類を定義する。rectangle,oval,line,ringの4つから選べるようだ。

  • courners

図形の角の丸みを調節できる。android:radius="integer"とすると全ての角。他は各角に対応している。line,oval,ringで指定するとどうなるか不明。(確認できしだい追記)

  • gradient

グラデーションを指定する。書きにくいので割愛。

  • padding

適用するビューとのpaddingを指定する。そのままのタグですね。

  • size

図形の大きさを指定する。
普通は図形を適用するビューの大きさに合わさるので無視される。
ここを指定するのは図形をImageViewのように直接使いたい場合だけか。

  • solid

図形の色を指定する。

  • stroke

枠線を指定する。
android:width="integer"は線の太さ。colorは色。
android:dashWidth="integer"は点線の太さ。
android:dashGap="integer"は点線の間隔。


画像を必要としないのでサイズを減らすことができる。あと噂では画像よりも処理が速いだとか。
下記のサイトは実行画面と一緒にいろいろなサンプルを紹介されている。綺麗だ。
http://narazoro.hatenablog.com/entry/20110710/1310273042