android 在MapView中重新定位Google徽标

jrcvhitl  于 2023-05-05  发布在  Android
关注(0)|答案(9)|浏览(196)

我在MapView的两个底部角落各放了两个按钮,部分遮住了左下角的google标志。
为了遵守API的条款和条件,我需要将Google徽标重新定位到更明显的地方。即在按钮上方。
Google API文档指出,Google徽标是在MapViewonDraw()方法中绘制的,但我不知道如何正确覆盖它,因为GoogleMap是封闭源代码的。
我可以在iPhone中通过在MKMapView's子项中找到正确的UIView来做到这一点,但我不知道如何在Android中做到这一点。

w8rqjzmb

w8rqjzmb1#

Google Maps SDK v2 for Android添加了此功能。
使用GoogleMap.setPadding()向“活动”区域(包括Google徽标和版权声明)添加填充,同时仍然填充整个容器。
https://developers.google.com/maps/documentation/android/map#map_padding

2ul0zpep

2ul0zpep2#

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

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的帧布局。

w1jd8yoj

w1jd8yoj3#

我也有同样的问题,但你可以在不与谷歌的条款和条件冲突的情况下实现你想要的。最主要的是把你的mapView放在一个Frame布局中,比如:

<?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徽标仍然可见,并且位于新窗口中的正常位置。

这是在Android 2.2工作它也有一个好处,标准的缩放控制也向上移动,所以它不会干扰你自己的按钮。

xbp102n0

xbp102n04#

来自文档:

protected final void onDraw(android.graphics.Canvas canvas)

onDraw是最终方法。完全不能覆盖
您也可以选择,显示您的按钮下面的Map视图在布局对齐父底部。这样你就可以在你喜欢的位置有按钮,它不会掩盖你的谷歌标志。

wribegjk

wribegjk5#

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

Rect rect = new Rect()
mMapView.getLocalVisibleRect(rect)
googleMap.setPadding(rect.width() - 100, 0, 0, rect.height() - 50)

如果你想把它放在其他地方,你将需要有乐趣与setPadding
也不要忘记隐藏谷歌Map的UI按钮:

googleMap.getUiSettings().setMapToolbarEnabled(false)
googleMap.getUiSettings().setZoomControlsEnabled(false)
googleMap.getUiSettings().setMyLocationButtonEnabled(false)

有一个(至少)问题。当使用相机将Map居中在给定点上时,将无法正常工作。如果需要移动相机,最好只将填充设置为可见的Map片段,它应该可以正常工作。使用rect知道要放入setPadding的尺寸

ego6inou

ego6inou6#

我是通过以下几点做到这一点的。

<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。

jaxagkaj

jaxagkaj7#

有点黑客,但你可以尝试添加一个MapView它到一个FrameLayout,设置MapView x X dp的高度大于FrameLayout,所以它被剪掉,并添加一个标志Drawable在任何你想要的地方。

wi3ka0sx

wi3ka0sx8#

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

ne5o7dgx

ne5o7dgx9#

如果你想删除谷歌水印,只需添加这行,

View googleLogo = mapview.findViewWithTag("GoogleWatermark");

googleLogo.visibility = View.GONE

你的问题就解决了

相关问题