GoogleMap V2の組み込みズームコントロールの位置をカスタマイズするにはどうすればよいですか?
Googleマップライブラリのバージョン1について、このトピックに関連する質問がたくさんあります。
setBuiltInZoomControls(true)でズームコントロールをレイアウトする方法
しかし、ライブラリのV2に関する質問は見つかりませんでした。
V2にはメソッドはありません
(LinearLayout) mapView.getZoomControls();
前述の質問はすべて廃止されます。
前もって感謝します
何をしようとしているかに応じて、 GoogleMap.setPadding() が便利です(2013年9月に追加)。
map.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);
APIドキュメントから:
このメソッドを使用すると、マップの4つのエッジのそれぞれにパディングを設定することにより、マップ上の可視領域を定義して、エッジの周囲のマップの一部が不明瞭になる可能性があることをマップに通知できます。マップ関数はパディングに適応されます。たとえば、ズームコントロール、コンパス、著作権表示、Googleロゴは、定義された領域内に収まるように移動されます。カメラの動きは、可視領域の中心を基準にして相対的になります。
GoogleMapでのパディングの動作の説明 もご覧ください。
はい、小さなハックでZoomControlおよびMyLocationボタンの位置を変更できます。私のサンプルではSupportMapFragmentがあり、これはxmlレイアウトから拡張されています。
ZoomControlおよびMyLocationボタンのIDを表示します。
ZoomControl id = 0x1
MyLocation button id = 0x2
ZoomControlの位置を更新するコード:
// Find map fragment
SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
// Find ZoomControl view
View zoomControls = mapFragment.getView().findViewById(0x1);
if (zoomControls != null && zoomControls.getLayoutParams() instanceof RelativeLayout.LayoutParams) {
// ZoomControl is inside of RelativeLayout
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) zoomControls.getLayoutParams();
// Align it to - parent top|left
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
// Update margins, set to 10dp
final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,
getResources().getDisplayMetrics());
params.setMargins(margin, margin, margin, margin);
}
参考までに:
ナビゲーションコントロールは0x4
合計で:
@LayoutRes final int ZOOM_CONTROL_ID = 0x1;
@LayoutRes final int MY_LOCATION_CONTROL_ID = 0x2;
@LayoutRes final int NAVIGATION_CONTROL_ID = 0x4;
私はSupportMapFragmentではなくMapFragmentを使用します。
import Android.util.TypedValue;
onCreate
// Find map fragment
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapview);
int ZoomControl_id = 0x1;
int MyLocation_button_id = 0x2;
// Find ZoomControl view
View zoomControls = mapFragment.getView().findViewById(ZoomControl_id);
if (zoomControls != null && zoomControls.getLayoutParams() instanceof RelativeLayout.LayoutParams) {
// ZoomControl is inside of RelativeLayout
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) zoomControls.getLayoutParams();
// Align it to - parent top|left
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
// Update margins, set to 10dp
final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,
getResources().getDisplayMetrics());
params.setMargins(margin, margin, margin, margin);
}