Android 在MapView中重新定位Google徽标

Android 在MapView中重新定位Google徽标,android,google-maps,android-mapview,Android,Google Maps,Android Mapview,我在地图视图的每个下角都有两个按钮,在左下角部分遮挡了谷歌徽标 为了遵守API的条款和条件,我需要将google徽标重新定位到更显眼的地方。i、 e.在按钮上方 google API文档声明google徽标是在MapView的onDraw()方法中绘制的,但我不知道如何正确覆盖它,因为google maps是封闭源代码的 我可以在iPhone中通过在MKMapView的children中找到正确的UIView来做到这一点,但我不知道如何在Android中做到这一点。来自文档: protected

我在
地图视图的每个下角都有两个按钮,在左下角部分遮挡了谷歌徽标

为了遵守API的条款和条件,我需要将google徽标重新定位到更显眼的地方。i、 e.在按钮上方

google API文档声明google徽标是在
MapView
onDraw()方法中绘制的,但我不知道如何正确覆盖它,因为google maps是封闭源代码的


我可以在iPhone中通过在
MKMapView的
children中找到正确的
UIView
来做到这一点,但我不知道如何在Android中做到这一点。

来自文档:

protected final void onDraw(android.graphics.Canvas canvas)
onDraw是最终的方法这完全不能被覆盖。


您也可以在与父底部对齐的布局中,在mapview下方显示按钮。通过这种方式,你可以在你喜欢的位置设置按钮,并且不会模糊你的谷歌徽标。

我也有同样的问题,但你可以实现你想要的,而不会与谷歌的条款和条件发生冲突。主要是将地图视图置于框架布局中,例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"     
 android:orientation="vertical" >          

 <FrameLayout android:id="@+id/map_frame"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_weight="0.7" >     

    <com.google.android.maps.MapView
        android:id="@+id/map_view" 
        android:layout_width="fill_parent"
        android:layout_height="match_parent" 
        android:enabled="true" 
        android:clickable="true"             
        android:apiKey="mySecretMapsApiKey"/>

 </FrameLayout>

 <ws.mentis.android.guardian.ui.MapNavBar
    android:id="@+id/map_nav"
    android:layout_width="fill_parent"
    android:layout_height="70dip"
    android:layout_gravity="bottom"
    android:layout_weight="0.3" /> 

 </LinearLayout>

我有许多按钮要包括在内,所以我在一个自定义小部件(MapNavBar)中创建了它们。 从屏幕截图中可以看到,Google徽标仍然可见,并且位于新窗口中的正常位置

这在安卓2.2中运行
它的另一个好处是,标准的缩放控件也会向上移动,这样就不会干扰您自己的按钮。

有点像黑客,但您可以尝试将
MapView
添加到
FrameLayout中,
MapView
的高度设置为大于
FrameLayout
的X dp,这样它就会被剪掉,并且添加一个Logo
Drawable
,无论你想在哪里。谷歌地图SDK v2 for Android增加了这个功能

使用
GoogleMap.setPadding()
将填充添加到“活动”区域(包括谷歌徽标和版权声明),同时仍填充整个容器


这是一个很老的问题,但也许有人会利用它。我让它出现在右上角:

Rect rect = new Rect()
mMapView.getLocalVisibleRect(rect)
googleMap.setPadding(rect.width() - 100, 0, 0, rect.height() - 50)
如果你想把它放在别的地方,你就需要享受设置填充的乐趣

另外,不要忘记隐藏谷歌地图的UI按钮:

googleMap.getUiSettings().setMapToolbarEnabled(false)
googleMap.getUiSettings().setZoomControlsEnabled(false)
googleMap.getUiSettings().setMyLocationButtonEnabled(false)
至少有一个问题。
当使用相机在给定点上居中贴图时,将无法正常工作。如果需要移动相机,最好只将填充设置为可见的贴图片段,这样应该可以正常工作。使用rect了解要放入的尺寸
setPadding

您可以借助分配给它的标签移动google徽标
GoogleWatermark
。在下面的代码中,我将其移动到屏幕的右上角

View googleLogo = binding.missionMap.findViewWithTag("GoogleWatermark");
RelativeLayout.LayoutParams glLayoutParams = (RelativeLayout.LayoutParams)googleLogo.getLayoutParams();
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 0);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_START, 0);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_END, RelativeLayout.TRUE);
googleLogo.setLayoutParams(glLayoutParams);

其中,
missionMap
是添加了
MapFragment
的框架布局。

除了使用谷歌地图文档中所述的谷歌地图对象上的填充之外,您无需做任何事情
注意:根据谷歌地图平台服务条款,您的应用程序不得删除或模糊谷歌徽标或版权声明。贴图填充允许您在必要时重新定位这些元素。如果在地图底部显示自定义UI,请在地图底部添加填充,以便徽标和法律公告始终可见。

我通过执行以下操作实现了这一点

<RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_marginBottom="-30dp"
  android:layout_marginTop="-30dp">

   <fragment
      android:id="@+id/map_frag_main"
      android:name="com.google.android.gms.maps.SupportMapFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".MainActivity" />

</RelativeLayout>


这将删除谷歌徽标,无需填充,只需确保添加一个可绘制的图标,否则将违反TOS。

re:bounty,至少需要在2.2上运行,但与新版本的兼容性也很重要。仅供参考,我看到了AtomicCharles的答案。我实际上从未注意到最后的关键字。事实证明,要做我想做的事情是不可能的:(恼人的问题是,使用ABS,带有覆盖功能的拆分操作栏将覆盖徽标,从而阻止条款。因此,覆盖功能在这里不是一个选项。谷歌自己用地图应用程序做一些事情,以便将徽标移动到拆分的覆盖上。是的,你可以这样做,但这不是我在问题中要求的布局:)但是它仍然给了你一种实现你想要的最终结果的方法。功能上,是的。视觉上,不是。我感谢你的回答,但这不是我想要/要求的:)这是一个好主意,格雷特。这是一种享受!单击标记时,我需要一个面板向上滑动,在地图上调用setPadding并传入面板的计算高度,从而将控件和徽标移动到面板上方。地图也会自动以点击的标记为中心,这很好。有人知道这在V1 API中是否可能?@lujop不,同样的事情在V1中不可能是一个很好的答案,但是相机中心的填充会受到影响,知道它被标记为“谷歌水印”非常好,谢谢。错误。您还可以直接将边距设置为片段。这取决于你。