我无法在Google API文档的任何位置找到其地图可以自定义(我知道它只能在网上自定义)但是可以在PokèmonGo上看到应用程序,它使用Google API显示自定义地图。
PokèmonGo的参考使用谷歌地图:https://www.reddit.com/r/pokemongo/comments/4s71t1/suggestion_download_city_map_as_a_way_to_decrease/
任何人都能找到这种方法吗?
答案 0 :(得分:44)
我不知道PokémonGO是如何做到的,但你可以通过一些布局技巧获得非常好看的效果。我正在使用天空图像,我用渐变视图覆盖天空图像和地图(模拟地平线),并使用半透明绿色视图覆盖地图。
<强> activity_maps.xml 强>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="170dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/sky"/>
<View
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_alignParentBottom="true"
android:background="@drawable/gradientsky"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="mypackage.MapsActivity"/>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2200ff00"/>
<View
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@drawable/gradientmap"/>
</RelativeLayout>
</LinearLayout>
<强> gradientsky.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="90"
android:startColor="#ffffff"
android:endColor="#00ffffff" />
</shape>
<强> gradientmap.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:startColor="#ffffff"
android:endColor="#00ffffff" />
</shape>
MapsActivity.java (琐碎,但我正在添加它以便示例完整)
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
map.getUiSettings().setCompassEnabled(false);
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(39.87266,-4.028275))
.zoom(18)
.tilt(67.5f)
.bearing(314)
.build();
map.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
}
结果如下:
另一种方法可能是使用TileOverlay来显示自定义地图。您可以找到有关Tile Overlays here的更多信息。
要改进示例,您可能需要向天空添加一些视差效果,以便在地图旋转时移动。
答案 1 :(得分:5)
Wikipedia arcticle给PokèmonGo的创建者:
Niantic,Inc。是一家最知名的软件开发公司 开发增强现实手机游戏Ingress和PokémonGo。 它由Keyhole,Inc。创始人John Hanke于2010年作为Niantic成立 实验室, Google 的内部创业公司。
正如您所看到的,Niantic是Google的内部创业公司。尽管两家公司分道扬,,谷歌仍然投资于Niantic。所以我认为Niantic有一些可能性,我们无法使用。正如您所说,我在Android版Google地图文档中找不到任何方法。
我不确定这是否属实,这只是猜测。