よくWebサイトであるような、小さな画像を背景にタイル状に敷き詰める方法。
xmlでの方法を書く人は居るのに、javaで書いてくれてる人が居ないので整理しておく。
XML指定での方法
res/drawable/icon_repeat.xml
ポイントはtileModeをrepeatに設定している事。
<?xml version="1.0" encoding="UTF-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:tileMode="repeat" android:src="@drawable/icon" ></bitmap>
res/layout/main.xml
先ほど定義したxmlを設定する。今回は手抜きで LinearLayout に定義してるが、ImageViewなどでも大丈夫。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/icon_repeat" ></LinearLayout>
Java指定での方法
ポイントは BitmapShader を使用して repeat 指定しているところ。
Shader shader = new BitmapShader(BitmapFactory.decodeResource(getResources(), R.drawable.icon), Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); Paint paint = new Paint(); paint.setShader(shader); Canvas canvas = getHolder().lockCanvas(); canvas.drawPaint(paint); getHolder().unlockCanvasAndPost(canvas);
用途としてはCanvasで描く時にタイル状に並べたいケースが想定されるため、サンプルは上記のようにしています。
Widgetに対してならsetBackgroundが使えるから、XMLで指定してやりゃ良いと思う。