使用 Kotlin 对 Android 10 上的标记进行聚类

2024-03-06

我发现 Google 的开发网站上大多只有 Java 代码示例,Kotlin 的代码示例也很少,这很烦人,所以我不得不在这里问这个问题。

我正在尝试设置 ClusterManager,但我没有任何线索说明它应该如何完成,并且没有可以看到的 Kotlin 示例。我确实做到了这么多:

override fun onMapReady(googleMap: GoogleMap) {
    // return early if the map was not initialised properly
    mMap = googleMap ?: return


    with(mMap.uiSettings) {
        isZoomControlsEnabled = true
        isMyLocationButtonEnabled = true
        isCompassEnabled = true
        isRotateGesturesEnabled = true
        isZoomGesturesEnabled = true
    }

    val clusterManager = ClusterManager<ScootMarker>(this, mMap)
    mMap.setOnCameraIdleListener(clusterManager)
    mMap.setOnMarkerClickListener(clusterManager)
    mMap.setOnInfoWindowClickListener(clusterManager)
    mMap.setInfoWindowAdapter(CustomInfoWindowAdapter(this))
    mMap.mapType = GoogleMap.MAP_TYPE_HYBRID

    setUpMap()
    getData()
}

然而,我不知道如何向该 ClusterManager 添加标记,也不知道如何将其绑定到我的 CustomInfoWindowAdapter。

我已经完成了自己的自定义项目,它返回片段、位置和标题。


请尝试以下代码,获取如何在 Kotlin 中添加标记聚类器的指导和演示。

class MyItem : ClusterItem {
    private val mPosition: LatLng
    private val mTitle: String
    private val mSnippet: String

    constructor(lat: Double, lng: Double) {
        mPosition = LatLng(lat, lng)
        mTitle = ""
        mSnippet = ""
    }

    constructor(lat: Double, lng: Double, title: String, snippet: String) {
        mPosition = LatLng(lat, lng)
        mTitle = title
        mSnippet = snippet
    }

    override fun getPosition(): LatLng {
        return mPosition
    }

    override fun getTitle(): String {
        return mTitle
    }

    override fun getSnippet(): String {
        return mSnippet
    }
}

class MapsActivity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnInfoWindowClickListener {

    private lateinit var mMap: GoogleMap
    private lateinit var mClusterManager: ClusterManager<MyItem>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maps)
        val mapFragment = supportFragmentManager
            .findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
        setUpClusterer()
        mMap.setOnInfoWindowClickListener(this);
    }

    private fun setUpClusterer() {
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(51.503186, -0.126446), 10f))
        mClusterManager = ClusterManager(this, mMap)
        mMap.setOnCameraIdleListener(mClusterManager)
        mMap.setOnMarkerClickListener(mClusterManager)
        addItems()
    }

    private fun addItems() {
        var lat = 51.5145160
        var lng = -0.1270060
        for (i in 0..9) {
            val offset = i / 60.0
            lat = lat + offset
            lng = lng + offset
            val title = "This is the title"
            val snippet = "and this is the snippet."
            val offsetItem = MyItem(lat, lng, title, snippet)
            mClusterManager.addItem(offsetItem)
        }
    }

    override fun onInfoWindowClick(marker: Marker) {
        Toast.makeText(
            this, "Info window clicked",
            Toast.LENGTH_SHORT
        ).show()
    }
}

请注意,这是基于 Google 指南 [1] [2] 中的 Java 代码实现,它对我来说没有问题,所以我希望这对您有帮助!

[1] https://developers.google.com/maps/documentation/android-sdk/utility/marker-clustering https://developers.google.com/maps/documentation/android-sdk/utility/marker-clustering
[2] https://developers.google.com/maps/documentation/android-sdk/infowindows https://developers.google.com/maps/documentation/android-sdk/infowindows

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Kotlin 对 Android 10 上的标记进行聚类 的相关文章

  • layout_constrainedWidth 无法正常工作

    我的 ConstraintLayout 中有 EditText 和 TextView TextView显示EditText的内容 输入时 我需要 EditText 展开直到屏幕中间 而 TextView 跟随它并填充后半部分 我将指导方针设
  • 如何在 Android 中的 onCreate() 内部创建方法

    如何在里面创建一个方法onCreate 方法 当我创建它的显示错误时 令牌 void 预期存在语法错误 并且如果无法在内部创建方法onCreate 方法比请告诉我如何在外部创建方法onCreate 并通过mContext and mActi
  • ActionBar 下拉微调器项目默认为第一项

    我试图设置默认情况下需要在微调器中选择的项目的索引 但它始终默认为 0 第一项 actionBar setDisplayShowTitleEnabled false actionBar setNavigationMode ActionBar
  • 为什么 Android 服务在测试时不是单例的?

    当运行大量测试套件时 我注意到我的一个 Android 服务不再是单例的 Android 服务应该是单例的 但是当使用 ServiceTestCase 时 我的引用计数超过 1 在 onCreate 中递增 在 onDestroy 中递减
  • 如何从 Cursor 获取行 ID

    如何从游标获取行 ID 我不认为 Cursor 直接暴露了这一点 SQLiteDatabase insert 返回新插入行的行 ID 或者在 Android 中 惯例是有一个名为 id 包含表的主自动增量键 所以cursor getLong
  • Android 通知 - 显示完整消息

    我的 Android 应用程序必须能够向一大群人发送简短的警报 执行此操作的明显位置是在通知中心 完整的通知毫无问题地显示在股票代码中 但在通知中心 用户只能看到前几个单词 然后是省略号 通知并不长 最多也就10 15个字 如何使文本自动换
  • 自定义视图的Ondraw无限循环android

    我的自定义视图的 OnDraw 函数被无限调用并且正在循环 可能的原因是什么 这是我的自定义视图 public class Balls extends View private static final String TAG BallsVi
  • 在 Samsung Galaxy S 上调用 RingTonePreference 时出现 NullPointerException

    在 Samsung Galaxy 上调用 RingTonePreference 时 我收到以下消息 在其他手机上一切正常 java lang RuntimeException Unable to start activity Compone
  • 如何以编程方式在 Android 中查找平板电脑或手机?

    我的情况是 手机和平板电脑的逻辑是相同的 但布局上略有不同 我尝试使用以下代码 public static boolean findoutDeviceType Context context return context getResour
  • 如何在默认浏览器或webview中打开按钮点击url

    我怎样才能打开一个网址webview或者点击按钮后在默认浏览器中 目前 当我单击btn1按钮 它提示我从手机中选择一个浏览器 我想在默认浏览器或其他浏览器中打开此网址webview 这是我的java代码 public class myact
  • 无法通过 Android 应用程序访问我的笔记本电脑的本地主机

    因此 我在发布此内容之前做了一项研究 我发现的解决方案不起作用 更准确地说 连接到我的笔记本电脑的 IPv4192 168 XXX XXX 没用 连接到10 0 2 2 加上端口 不起作用 我需要测试使用 Django Rest 框架构建的
  • Android系统每个应用程序的通知限制

    这可能偏离主题 但我找不到任何相关内容 Android应用程序可以显示的通知数量有限制吗 我在收到 100 条通知后遇到问题 没有文件明确说明这一点 注意 显示 100 条通知并不是一个好主意 但由于某些原因这是必需的 In API23 包
  • 更新 Google 地图流量层而无需重新加载页面

    我的页面中嵌入了 Google 地图 我使用 initMap js 函数来初始化地图 function initMap var map new google maps Map document getElementById t map zo
  • Android - 主页按钮发出什么意图?

    我想知道设备的主页按钮到底执行什么操作 即 当您单击主页按钮时会发出什么意图 意图类别和操作 回到空白的主屏幕 我想知道在单击我自己的自定义按钮时实现此操作涉及什么 谢谢 PS我知道这不是标准的 但我的设备也不是 如果您想显示主屏幕 可以通
  • jQuery mobile - 仅在侧面板关闭时才允许滚动?

    我不希望用户在任何侧边栏打开时滚动 一旦关闭 他们应该滚动 我使用了下面的代码 但它不适用于 Android 移动设备 document bind panelopen function e data body css overflow hi
  • 带动画的 ScrollTo(0,250) Android ScrollView

    当我滚动到 0 250 时 我想在滚动动作中包含一个动画 我做了这段代码 但它没有根据动画滚动 scrollMe 是滚动小部件 id ObjectAnimator anim ObjectAnimator ofInt scrollMe tra
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • 在 Android Studio 4.0(Canary) 中找不到预览窗口在哪里

    我正在浏览有关在 Android Studio 4 0 Canary 中运行的 Jetpack 的教程 请参阅下面的链接文章 https developer android com jetpack compose tutorial http
  • Google Place Api:来自此 Android 客户端应用程序 com.package.name 的请求被阻止

    我在用PlaceAutocompleteFragment当我单击搜索字段 PlaceAutocompleteFragment 对话框消失时 我收到此错误 errors domain global re ason forbidden mess
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有

随机推荐

  • 如何绑定到任何可用端口?

    我需要一个将 UDP 数据包发送到某个网络服务器并接收响应的应用程序 服务器回复请求所在的相同端口号 因此我首先需要将我的套接字绑定 到任何 UDP 端口号 对 UDP 端口号进行硬编码是一个坏主意 因为它可能会被同一台 PC 上运行的任何
  • WPF 简单的提示和技巧? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在研究边距和填充时发现负值是可以接受的 并且在适当的情况下会产生很好的效果 例如 如果您的边框带有填充对象 并且您希望填充对象颜色超
  • 动态组件流畅自动映射

    有谁知道如何在 NHibernate 中使用 Fluent Automapping 自动映射动态组件 我知道我们可以将普通类映射为组件 但无法弄清楚如何使用流畅的自动映射将字典映射为动态组件 Thanks 我们成功地使用了以下方法 流畅NH
  • Docker compose 文件所有权

    我使用 Docker Compose 创建了 Django 项目 Dockerfile FROM python 2 7 ENV PYTHONUNBUFFERED 1 RUN mkdir code WORKDIR code ADD code
  • 如何在 Firefox page-mod 中进行重定向?

    我正在尝试将我的 Google Chrome 扩展程序移植到 Firefox Add On SDK 并且我需要该扩展程序来过滤我网站中的页面并进行重定向 例如 如果用户打开 http example com special http exa
  • 向material-ui AppBar组件添加垂直分隔线

    我们如何为 AppBar 设置垂直分隔线muicss 的左 右分隔符组件 https www muicss com docs v1 react dividers 只需插入 div 元素即可height 100 不起作用
  • 检查表是否存在,如果不存在,则在SQL Server 2008中创建它

    我正在 SQL Server 2008 中编写一个存储过程 我需要检查数据库中是否存在表 如果没有 那么我需要创建它 我该怎么做呢 像这样的东西 IF NOT EXISTS SELECT FROM sys objects WHERE obj
  • .htaccess 更改 URL

    所以我有一个 mvc 系统设置 但它不会生成搜索引擎友好的 url 典型的 url 格式如下 http sitedomain com class classMethod parameter valueA parameter2 valueB
  • 从 Flex 中的字符串中取消转义(解码)HTML 字符

    如何取消转义 HTML 编码字符 例如 gt lt 等 来自字符串 在 Flex AS3 中 所以 我有一个字符串 x gt 3 我希望结果字符串为 x gt 3 也许最简单的方法是通过 TextArea 或其他基于文本的组件发送它 这也将
  • 奇怪的“str”对象不可调用python

    大家好 在我的代码中我得到了这个堆栈 Traceback most recent call last File main py line 30 in
  • Android ImageView调整父级的高度和适配宽度

    Update 我通过使用描述的方法解决了这个问题这个答案 https stackoverflow com questions 2991110 android how to stretch an image to the screen wid
  • 如何为 GitHub 开放软件存储库做出贡献?

    我读了很多教程 试图找出使用 GitHub 本身为 GitHub 存储库做出贡献的工作流程的简单步骤 我是一名 Windows 程序员 所以我发现本地 git CLI 非常尴尬 而且要复杂得多 而不是在 GitHub 上完全远程工作 我将在
  • 在排序表达式中使用聚合函数

    我有一个使用从存储过程返回的数据集的报告 有两个关键列 Name and Value 我将此数据集用于两个 tablixes 第一个只是显示数据的简单 tablix 第二组数据基于Name柱子 我需要根据总和对这些数据进行排序Value c
  • 在 Emacs 中编写“Hello World”?

    我想在 Emacs Lisp 中编写一些 Unix 脚本 但是 似乎没有一种干净的方法来写入 STDOUT 因此我可以将结果重定向到文件或将输出通过管道传输到另一个命令 这print函数在输出字符串周围放置双引号 所以我得到 你好世界 代替
  • Visual Studio 2015 调试器 - 对 SqlCommand 的高性能影响

    从 VS2013 升级到 VS2015 后 我对附加了调试器的 Web 应用程序运行速度如此之慢感到震惊 所以我决定使用 VS2013 和 VS2015 进行比较迷你分析器 http miniprofiler com 分析一个特别慢的页面
  • git 写入和读取访问权限,无需成为服务器用户

    我搜索了一段时间 但找不到合适的解决方案 我的情况 我有一台服务器 上面有一个 git 存储库 只有使用合适的 ssh 密钥才能连接到服务器 是否可以向无法访问服务器的用户授予从此特定存储库写入和读取的权限 是否只能通过在服务器上为用户创建
  • 如何在Python中断言两个列表包含相同的元素? [复制]

    这个问题在这里已经有答案了 在编写测试用例时 我经常需要断言两个列表包含相同的元素 而不考虑它们的顺序 我一直通过将列表转换为集合来做到这一点 有没有更简单的方法来做到这一点 EDIT 正如 MarkDickinson 指出的那样 我可以使
  • 称程序“延迟”的最佳方式是什么?

    有两个过程 A1 和 A2 它们都在其代码中调用函数 B function B boolean begin do other stuff end procedure A1 begin do stuff if b then do stuff
  • 将谷歌地图折线转换为 html 画布线 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要将谷歌地图折线显示到 html 画布中 我如何像这样转换坐标 lat 25 5643498 lng 45 34492432 像这样的画
  • 使用 Kotlin 对 Android 10 上的标记进行聚类

    我发现 Google 的开发网站上大多只有 Java 代码示例 Kotlin 的代码示例也很少 这很烦人 所以我不得不在这里问这个问题 我正在尝试设置 ClusterManager 但我没有任何线索说明它应该如何完成 并且没有可以看到的 K