Backgroundに設定した画像を拡大させない方法

AndroidのViewのbackgroundに画像を設定した場合にViewのサイズに合わせて画像も拡大されます
通常は特に問題ないのですがどうしても画像を拡大させたくない場合がある時の対処方法を紹介します

今回は24x24dpの以下のような画像を使いました (AndroidStudioのImageAssetで作りました)

ic_weekend.png

画像サイズを維持するDrawableを作成する

以下のようなDrawableファイルを使うことで画像サイズを維持するDrawableを作成することが可能になります

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="center"
    android:src="@drawable/ic_weekend"/>

最低限必要なのはsrcのみで表示したい画像を設定します
gravityを設定することで表示位置を変更できます

実際の表示

以下のようなレイアウトを設定して表示を確認してみます
48x48dpと12x12dpの2通り

<View
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:background="@drawable/ic_weekend"
    />

<View
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:background="@drawable/no_scale_ic_weekend"
    />
    
<View
    android:layout_width="12dp"
    android:layout_height="12dp"
    android:background="@drawable/ic_weekend"
    />

<View
    android:layout_width="12dp"
    android:layout_height="12dp"
    android:background="@drawable/no_scale_ic_weekend"
    />

Screen Shot 2016-12-19 at 11.57.01 PM.png

2,4番目が今回作った、サイズを維持するdrawableを表示した場合です
1番目は拡大されて表示していますが2番目では期待通り24x24dpの表示になっています

おまけですが12x12dpの場合も見てみました
ただの画像を表示した場合はサイズに合わせて縮小されていますが、今回つくってDrawableでは一部分のみしか表示されていませんでした

まとめ

固定画像のサイズをViewのBackgroundに設定する際にはbitmap要素のDrawableファイルを作成すると良いようです

画像サイズより大きいViewのbackgroundに画像を表示する場合は問題ないですが、
小さいViewに設定する際には一部分のみしか表示されないので注意する必要があります