2014年1月2日木曜日

ImageViewをソースコードで配置する例

ImageViewをソースコードで配置するコーディングの例です。

FrameLayout canvas = (FrameLayout)this.findViewById(R.id.canvasFrameLayout);

ImageView imageView = new ImageView(this);
imageView.setPadding(getDensity(130), 0, 0, 0); //left,top,right,bottom
imageView.setImageResource(R.drawable.ic_point);
imageView.setLayoutParams(new FrameLayout.LayoutParams(getDensity(180), getDensity(180), Gravity.CENTER));
canvas.addView(imageView);

private int getDensityDP( int val) {
return (int)((float)val * getResources().getDisplayMetrics().density);
}

前の投稿のレイアウトエディタのxmlで配置したのと同じようにソースコードで配置してみる。

ポイント
・xmlのpaddingRight:.setPaddingメソッドを使う。
・xmlのlayout_gravity、layout_width、layout_height:上記サンプルの通り.setLayoutParamsを使う。引数でFrameLayoutのオブジェクトを渡しているが、FrameLayoutのオブジェクトでないとGravity.CENTERが渡せない。
・上記それぞの座標で与えている数値の単位はドット。dp, dpiではない。dpを推奨とあるにもかかわらず疑問ですが、上記の例のとおりgetDensityDP()メソッドを作りドットをdpに変換する。


レイアウトエディタのxmlとソースコードのメソッド名を一致してくれればいいのにと思いますがなぜなんでしょうね。