首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Kotlin的Android 10聚类标记

基于Kotlin的Android 10聚类标记
EN

Stack Overflow用户
提问于 2019-11-25 19:47:41
回答 1查看 1.6K关注 0票数 3

我发现Google的开发站点上大多只有Java代码示例,而Kotlin中也很少有Java代码示例,这是非常烦人的,所以我必须在这里问一问。

我试图设置一个ClusterManager,但我没有任何线索,它应该如何做,也没有Kotlin的例子可以看到。我确实做得很好:

代码语言:javascript
复制
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。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 22:20:33

请尝试下面的代码,以指导和演示如何在Kotlin中添加标记簇。

代码语言:javascript
复制
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()
    }
}

请注意,这是基于Java代码实现从谷歌的指南1和它的工作没有问题,所以我希望这能帮助你!

1

2

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59039094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档