27
Drawable Resouceの話

android drawable

  • Upload
    ukayare

  • View
    1.700

  • Download
    2

Embed Size (px)

Citation preview

Page 1: android drawable

Drawable Resouceの話

Page 2: android drawable

Drawable?

● Androidで表示するUIパーツを1つの描画コンポーネントとしてまとめておくもの

● res/drawable/ 以下に置く○ 画像ファイル(png推奨)

○ xmlファイル(後で説明する決められたフォーマットでか

かれたもの)

Page 3: android drawable

アクセスの方法

res/drawable/hoge_huga.pngを作成した場合

● Java○ R.drawable.hoge_huga

● xml(layout等)○ @drawable/hoge_huga

で呼び出せる

Page 4: android drawable

各Drawableリソースの説明

一覧● bitmap● 9-patch● layer-list=LayerDrawable● selector=StateListDrawable● level-list=LevelListDrawable● transition=TransitionDrawable● inset=InsetDrawable● clip=ClipDrawable● scale=ScaleDrawable● shape=ShapeDrawable

Page 5: android drawable

bitmap

● 通常の画像リソース● 入れた画像がそのまま表示されるわけではない

(見た目的には変わってないけど)○ アプリをビルドするときに最適化が行われて圧縮される

可能性がある

○ メモリ消費を抑えたりするためのものなのであまり意識

しないでもいいかも

○ (あまりないけど)直接のbitmapデータがほしい場合は

(res/raw/)以下において読む込むようにする(アクセス

は前述したdrawableをrawに変えるだけ)

Page 6: android drawable

bitmap

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

Page 7: android drawable

xml bitmap

bitmapファイルにオプションを

いろいろ定義できる

● アンチエイリアス● タイル(敷き詰め)

xml<bitmapxmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_launcher" android:tileMode="repeat" />

Page 8: android drawable

9-patch

● 伸縮可能なbitmapリソース● 説明済みなのでスキップ

Page 9: android drawable

layer-list

● 複数のdrawableを重ねあわせ表示を行うためのもの

● リソースを使い回したりするときに利用する

Page 10: android drawable

layer-list<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item> <bitmap android:src="@drawable/ic_launcher" android:gravity="center" />

</item><item android:top="10dp" android:left="10dp">

<bitmap android:src="@drawable/ic_launcher" android:gravity="center" />

</item><item android:top="20dp" android:left="20dp">

<bitmap android:src="@drawable/ic_launcher" android:gravity="center" />

</item>

</layer-list>

Page 11: android drawable

selector

● 各状態によって表示を変化させたりできる● タップ前、タップ中、タップ後で表示するものを変

更したりできる

タップ前タップ中

Page 12: android drawable

selector<?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/ic_launcher" />

<item android:state_focused="true" android:drawable="@android:drawable/ic_delete" />

<item android:state_hovered="true" android:drawable="@android:drawable/ic_menu_manage" />

<item android:drawable="@android:drawable/ic_menu_edit" /></selector>

Page 13: android drawable

level-list

● 閾値を設けてそれによって表示を制御することが出来る● 10回タップしたら色を変える。と言ったことが可能● 閾値は複数設定可能

<?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>

Page 14: android drawable

transition

● 2つのdrawableリソースを利用● 2つをフェードで入れ替え表示が出来る● フェード速度は制御可能(開始や速度の制御は

Javaで行う)

<?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>

Page 15: android drawable

inset

● 特定のdrawableに差し込むためのdrawable● 用意されたdrawable領域に対していれるリソー

スが小さい場合に利用するといい○ layout側でmerginやpadding設定でも代用可能

<?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" />

Page 16: android drawable

clip

● 設定したlevelパラメータによって表示度合いを制御できる

● levelは0~10,000まで(0で何も表示されない)<clipxmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/android" android:clipOrientation="horizontal" android:gravity="left" />

Page 17: android drawable

scale

● 参照するdrawableリソースの表示サイズを制御できる

<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%" />

Page 18: android drawable

shape

● 幾何学系の図形を描画出来る● 細かい設定を行えば画像リソースを用意しなく

てもよい

Page 19: android drawable

shapeの利点

● 表示されるときはベクター画像として扱われる○ 複数解像度に合わせてリソースを用意しないと行けない

という問題がない

● プログラム上での操作が割と容易○ アクションに応じて色を変えると言った事が行える

● 単純にファイルサイズが小さい○ アプリサイズを押さえられる

Page 20: android drawable

shapeだと難しいもの

● 文字のような複雑な図形○ アイコンなどは画像として用意した方がよい○ 例:公式アプリのイイネボタン等○ 共通のリソースが使えるのであればそれを使ってよい

● ボタンなどの縦横比が変化しやすい素材○ nine-patchでがんばる?

● API level(OSのバージョン)によって一部バグが存在する(API level 10以下)

● 大体CSSで作成できるものは作れる感覚

Page 21: android drawable

shapeで作れるものの例

これ

参考http://www.marineroad.com/staff-blog/4095.html

Page 22: android drawable

(xml)<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <gradient android:startColor="#CCEEEEEE" android:endColor="#CC222222" android:angle="90" android:type="linear"/> <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp" /> </shape> </item> <item android:top="2dp" android:left="2dp" android:right="2dp" android:bottom="2dp">

<shape android:shape="rectangle"> <gradient android:startColor="#222222" android:endColor="#DDDDDD" android:angle="90" android:type="linear"/> <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp" /> </shape></item><item android:top="2dp" android:left="2dp" android:right="2dp" android:bottom="2dp"> <shape android:shape="rectangle"> <gradient android:startColor="#CC222222" android:endColor="#22AAFFAA" android:angle="90" android:type="linear"/>

<corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp" /> </shape></item><item android:top="32dp" android:left="2dp" android:right="2dp" android:bottom="2dp"> <shape android:shape="rectangle"> <solid android:color="#40000000" /> <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="0dp" android:topRightRadius="0dp" /> </shape> </item> </layer-list>

Page 23: android drawable

layer-list

shape

shape

shape

Page 24: android drawable

animation系リソース

● res/anim以下に設置● xmlで記述する● 設定を書いてあるだけで開始等の制御はJava

側で行う

Page 25: android drawable

おまけ:デフォルトのリソースも使おう

● 以下に存在するリソースの一覧がある

○ http://developer.android.com/reference/android/R.drawable.html

● 実際に表示されるとどういうものかを見たいとき

○ http://androiddrawableexplorer.appspot.com/● ただしOSのversionによって表示されるものが異なる場合あ

● 実機で確認したほうが良い

○ http://qiita.com/gfx/items/b0e36c4f871b2018c42a● 上のリストに存在しないが実際あるものもある

○ 各versionのSDKのdata/res/drawable-mdpi をみる

Page 26: android drawable

リソースを入れるときのファイル名

● camelCase、もしくはsnake_caseでファイル名を記述して命名規則は統一

● 命名規則についてはこの辺を参照するといいかも○ http://www.kojion.com/android/naming_rule.html

● Androidがデフォルトでおいてあるdrawableリソースはすべてsnake_case○ 公式に習ってsnake_caseで統一○ 公式と区別できるようにするためにcamelCaseにする

■ エンジニアと相談して決めましょう

Page 27: android drawable

Androidの基本的なアイコン命名規則

● アイコン○ ic_xxxxxx

● ランチャー○ ic_launcher_xxxxx

● メニュー・アクションバー○ ic_menu_xxxxx

● ステータスバー○ ic_stat_notify_xxxx

● タブ○ ic_tab_xxxxxx

● ダイアログ○ ic_dialog_xxxxx