如何在GoogleMap V2中自定义内置缩放控件的位置?
Google地图库的第1版有很多与此主题相关的问题。
Placing Zoom Controls in a MapView
How to reposition built-in zoom controls in MapView?
How to layout zoom Control with setBuiltInZoomControls(true)?
但是,我无法找到与图书馆V2相关的任何问题。
在V2中,没有方法
(LinearLayout) mapView.getZoomControls();
所有前面提到的问题都已过时了。
提前致谢
答案 0 :(得分:38)
根据您要执行的操作,您可能会发现GoogleMap.setPadding()有用(2013年9月添加)。
map.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);
来自API文档:
此方法允许您在地图上定义可见区域,通过在地图的四个边缘中的每一个上设置填充来向地图发信号通知边缘周围的地图部分可能被遮挡。地图功能将适应填充。例如,缩放控件,指南针,版权声明和Google徽标将移动到适合定义区域内,相机移动将相对于可见区域的中心等。
答案 1 :(得分:23)
是的,你可以用小黑客改变 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);
}
答案 2 :(得分:9)
AFAIK,无法移动标准变焦控制。但是,您可以隐藏它们并在任何地方拥有自己的缩放按钮,但您将负责根据这些按钮点击来调整地图的缩放。
答案 3 :(得分:0)
仅供记录:
导航控件为0x4
所以总的来说:
@LayoutRes final int ZOOM_CONTROL_ID = 0x1;
@LayoutRes final int MY_LOCATION_CONTROL_ID = 0x2;
@LayoutRes final int NAVIGATION_CONTROL_ID = 0x4;
答案 4 :(得分:0)
我使用MapFragment而不是SupportMapFragment:
import android.util.TypedValue;
// 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);
}
答案 5 :(得分:-1)
final int dp=100;//Whatever padding you want to set in dp
final int scale= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
getResources().getDisplayMetrics());
googleMap.setPadding(0, 0, 0, scale);//here i am setting bottom padding