带有自定义标记的 Android 地图(标记上的文本)
Posted
技术标签:
【中文标题】带有自定义标记的 Android 地图(标记上的文本)【英文标题】:Android Maps with Custom Marker (text on the marker) 【发布时间】:2016-09-21 04:25:12 【问题描述】:我以前从未使用过地图 api。我想实现如下图所示的地图。我正在从 Web 服务获取数据,使用它我可以将事件计数显示在标记上。 基本功能是,一旦用户放大,地图标记就会展开,因此标记计数。
我的问题是:
-
有没有办法像这样自定义标记。
如何处理放大、缩小事件中的标记计数。
请帮忙。提前致谢。
【问题讨论】:
你检查了我在回答中提到的库 @skadoosh 我已经浏览了上述库的文档,它似乎很有帮助。实施完成后我会确认。 【参考方案1】:您不需要做任何事情来计算标记并显示它在图片中的方式。 谷歌有一个名为Google Maps android API utility library的库
你需要的那个叫
标记聚类——处理大量点的显示。 video
【讨论】:
因为它的工作,你现在可以点击我的答案上的那个复选框:) :)【参考方案2】:Android-Maps-Utils 具有标记聚类实用程序。步骤如下:
在您的 build.gradle 中添加 compile 'com.google.maps.android:android-maps-utils:0.4.3'
。
在您的清单中添加以下权限
<uses-permission android:name="your.package.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
创建一个类,将标记的位置作为 LatLng 对象。
公共类 MarkerItem 实现 ClusterItem
private final LatLng mPosition;
public MarkerItem (double lat, double lon)
mPosition = new LatLng(lat, lon);
@Override
public LatLng getPosition()
return mPosition;
在 Activity/Fragment 中添加 ClusterManager
公共类 MainActivity 扩展 FragmentActivity 实现 OnMapReadyCallback
private GoogleMap mGoogleMap;
// Declare a variable for the cluster manager.
ClusterManager<MarkerItem> mClusterManager;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment supportMapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
supportMapFragment.getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap)
mGoogleMap = googleMap;
setUpClusterer();
private void setUpClusterer()
// Position the map.
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));
// Initialize the manager with the context and the map.
// (Activity extends context, so we can pass 'this' in the constructor.)
mClusterManager = new ClusterManager<>(this, mGoogleMap);
// Point the map's listeners at the listeners implemented by the cluster
// manager.
mGoogleMap.setOnCameraChangeListener(mClusterManager);
mGoogleMap.setOnMarkerClickListener(mClusterManager);
// Add cluster items (markers) to the cluster manager.
addItems();
/**
* Generate dummy coordinates
*/
private void addItems()
// Set some lat/lng coordinates to start with.
double lat = 51.5145160;
double lng = -0.1270060;
// Add ten cluster items in close proximity, for purposes of this example.
for (int i = 0; i < 10; i++)
double offset = i / 60d;
lat = lat + offset;
lng = lng + offset;
MarkerItem offsetItem = new MarkerItem(lat, lng);
mClusterManager.addItem(offsetItem);
这个库自动处理集群部分。
我希望这会有所帮助!
更多详情:请关注this link
【讨论】:
以上是关于带有自定义标记的 Android 地图(标记上的文本)的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义图块的传单地图上的标记位置随着更高的缩放级别而变化
在谷歌地图自定义标记未显示在三星 S8 或 Android 的相同版本 7.0