使用捏缩放创建交互式地铁地图(Android)

时间:2014-04-02 06:57:57

标签: android android-layout microsoft-metro maps

我是Android的新手,我有一个非常有趣的应用程序项目。我需要的是为两条过境的地铁线路/路线及其各自的车站创建地铁地图。

如果我们考虑一个静态布局,使用地铁路线的背景图像并使用相对于布局设置的工作站的按钮,这似乎很容易。

当整个布局必须可缩放时,无论是缩放按钮级别还是缩放和缩放,都会遇到困难。这包括在缩放后通过拖动移动地图。

也许这个问题可能有点令人困惑。如果我没有表达自己,这是一个应用程序的例子,它或多或少与我想要的相同:

https://play.google.com/store/apps/details?id=com.mtr.mtrmobile

这是香港的地铁地图。我想在应用程序上创建与地图相同的功能,但在我的情况下仅用于两条地铁线。

我对android.graphics或OpenGL不是很熟悉,我一直在互联网上搜索答案或类似问题很长时间没有结果。

如果有人能够简单地向我解释应用程序上的地图是如何制作的,或者让我知道如何实现这一目标,我将非常感激。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我建议您查看OSMdroid,它可以让您加载离线地图,并且可以覆盖您想要的任何内容。

有用的: https://code.google.com/p/osmdroid/

这与GoogleMaps API非常相似,所以它非常简单,而且重要的是你有OSMdroid的版主帮助你。我目前正在使用这个API,我非常喜欢它。

答案 1 :(得分:1)

就像zIronManBox所说,OpenStreetMap是一个很好的方法。通过实施OSMdroid,您可以拥有在线或离线地图,并能够将标记添加到位置,甚至标记整条街道。

获得OSMdroid也很容易。您需要有两个库: osmdroid-android-4.1.jar slf4j-android-1.6.1-RC1.jar 。版本很重要。

现在您只需创建一个activty和一个xml文件。

在您的XML文件中(我的名字是map),您有以下代码:

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


         <org.osmdroid.views.MapView
             xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/mapView"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             tilesource="MAPQUESTOSM" />

     </LinearLayout>

这将使用id mapView创建一个视图。如果您想要上面或下面的文本字段,可以在此XML文件中添加它。 在活动中,您应该在onCreate中添加此代码:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);

    mapView = (MapView) this.findViewById(R.id.mapView);
    mapView.setBuiltInZoomControls(true);
    mapView.setMultiTouchControls(true);
    mapView.setClickable(true);
    mapController = (MapController) mapView.getController();
    mapController.setZoom(14);

不要忘记在清单文件中添加权限:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

如果您需要良好的指南以使地图开始工作,请访问 http://android-er.blogspot.se/2012/05/simple-example-use-osmdroid-and-slf4j.html 这里有很多关于OSMdroid的教程!