【Android】画像を画面サイズに合わせて表示する(マルチデバイス対応)

画像を複数デバイスの画面サイズに合わせて表示しマルチデバイスに対応したい。

Androidデバイスは画面サイズやアスペクト比がさまざまで、基準が決めにくい為、
iphone3G(320×480px)やiphone4(640×960px)の画像解像度のアスペクト比2:3を基準にする。

■仕様■
・準備する画像はすべてアスペクト比2:3とする。
・画面表示は横幅を基準とし、横幅いっぱいに表示する。
・ほとんどの機種で高さが少し短くなるので、画像を中央に配置し、余白(背景)は黒にする。
・現行機種でアスペクト比2:3よりも高さが小さいものはない様なので、このタイプは対応しない事とする。

【ImageResizeView.java】(マルチデバイス対応画像リサイズクラス)

public class ImageResizeView extends View{
	
	private Bitmap bmp;
	private int dp_w;
	private int dp_h;
	private int drow_h;
	private int drow_s;
	
	public ImageResizeView(Context context, int resource_name){
		super(context);
		// リソースからbitmapを作成
		bmp = BitmapFactory.decodeResource(context.getResources(), resource_name);
		// WindowManager取得
		WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
		// Displayインスタンス生成
		Display dp = wm.getDefaultDisplay();
		// ディスプレイサイズ取得
		dp_w = dp.getWidth();
		dp_h = dp.getHeight();
		// リサイズ画像の高さ
		drow_h = (dp_w / 2) * 3;
		// 描画始点の高さ
		drow_s = (dp_h - drow_h) / 2;
	}

	@Override
	protected void onDraw(Canvas canvas){
		// 背景色
		canvas.drawColor(Color.BLACK);
		// イメージ画像リサイズ
		bmp = Bitmap.createScaledBitmap(bmp, dp_w, drow_h , true);  
		// 描画
		canvas.drawBitmap(bmp, 0, drow_s, null);
	}
}

Viewクラスを継承して、onDrawメソッドをオーバーライドしてcanvasに描画する。

【Activity000.java】(Activityクラス)

public class Activity000 extends Activity {

	// リソースファイル名
	int resource_name = R.drawable.img00;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        
		setContentView(new ImageSizePut(this, resource_name));
	}
}

【出力結果】
画像マルチデバイス対応

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>