resフォルダに格納した複数の画像を、ソースコード内ではなくxmlファイル内で配列管理して、それをソースコードで使えるようにする方法です。
1.任意のxmlファイルに配列管理したい画像の整数配列(integer-array)を設定する
動画の解説内では、「strings.xml」に設定していますが、<resources>タグで括ってさえいれば、どのxmlファイルに記述しても問題ないそうです(引用参照)。
<resources> <integer-array name="background_list"> <item>@drawable/back001</item> <item>@drawable/back002</item> <item>@drawable/back003</item> <item>@drawable/back098</item> <item>@drawable/back099</item> <item>@drawable/back100</item> </integer-array> </resources>
A typed array is a simple resource that is referenced using the value provided in the
name
attribute (not the name of the XML file). As such, you can combine typed array resources with other simple resources in the one XML file, under one<resources>
element.
2.1で設定した配列をソースコードで使う
たとえば、こんな感じで
val backGroundArray = resources.obtainTypedArray(R.array.background_list) :① val backGroundRes = backGroundArray.getResourceId(0, -1) :② 第一引数が配列のインデックス constraintLayout.setBackgroundResource(backGroundRes) :③ backGroundArray.recycle() ← 最後はTypedArray#recycle()を使わないといけないらしい :④
- Resources#obrainTypedArray()で、xmlで設定した配列を取得
- Resources#getResourcesId(配列のインデックス, デフォルト値)で、配列内で使いたい画像のリソースIDを取得
- 画面の背景に②で取得したリソースIDの画像を表示
- TypedArray#recycle()で、①で取得した配列のリサイクル
(詳しくは下の動画で解説していますので、よろしければご覧ください)