2014年2月18日火曜日

Androidで画像をタイル状に敷き詰める

Androidアプリで画像をタイル状に敷き詰める方法。
xmlで指定する方法はたくさん見つかるのに、Javaから画像を指定する方法が少ないのでメモ。

Bitmapの画像データを設定してます。

※残念なことに、2.3系の端末だと縦に繰り返しができなかった

xml
<ImageView
        android:id="@+id/bg_image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY" />
java
BitmapDrawable bd = new BitmapDrawable(bitmap);    // bitmap に指定したい画像
bd.setTileModeX(Shader.TileMode.REPEAT);
bd.setTileModeY(Shader.TileMode.REPEAT);
((ImageView)findViewById(R.id.bg_image))..setImageDrawable(bd);

Shader.TileMode は REPEATとMIRRORとCLAMPが選べる。




応用編

またまた残念なことに、超高解像度端末に対応する画像を用意してもらえなかったので、
画面サイズいっぱいに引き延ばして縦に繰り返して表示することになった実装が以下。

        // 縦横比を保ったまま横幅いっぱいにリサイズ
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        float widthScale = (float) metrics.widthPixels / result.getWidth();

        Matrix matrix = new Matrix();
        matrix.postScale(widthScale, widthScale);
        BitmapDrawable repeateImage
            = new BitmapDrawable(Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true));

        // 縦方向に繰り返し表示
        repeateImage.setTileModeY(Shader.TileMode.REPEAT);
        image.setImageDrawable(repeateImage);




0 件のコメント:

コメントを投稿