[JAVA] Correspondance entre RecyclerView et Marker (Kotlin)

Ce que tu veux faire

Si vous faites défiler RecyclerView, vous vous déplacerez vers le marqueur de Google Map correspondant à cet élément, et si vous appuyez sur Marqueur sur la carte, RecyclerView fera défiler jusqu'à l'élément. ezgif.com-optimize.gif J'utilise également CardView et Snaphelper, mais je ne les expliquerai pas.

environnement

Android Studio Kotlin Maps SDK for Android

Méthode

RecyclerView -> Marker L'ordre sur le RecyclerView est jugé par la quantité de défilement et la carte est déplacée vers la position de l'élément.

//recycler -> marker
recyclerView.addOnScrollListener(object :RecyclerView.OnScrollListener(){//Faites défiler pour passer au marqueur
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {//Jugement de position en fonction de la quantité de défilement
        super.onScrolled(recyclerView, dx, dy)
        val offset = recyclerView.computeHorizontalScrollOffset()
        val itemWidth = cafeCardRoot.width
        val edgeMargin = (recyclerView.width - itemWidth)/2
        val position = (offset + edgeMargin) / (itemWidth + edgeMargin/2)

        if (myCafesData[position].latitude == "" || myCafesData[position].longitude == "") {
            return
        }else{
            val moveLatLng = LatLng(myCafesData[position].latitude.toDouble(),myCafesData[position].longitude.toDouble())
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(moveLatLng, 16F))
        }
    }
})

Marker -> RecyclerView Déterminez l'ordre des marqueurs et faites défiler jusqu'à cet élément.

//marker -> recycler
mMap.setOnMarkerClickListener(object : GoogleMap.OnMarkerClickListener{
    override fun onMarkerClick(marker: Marker?): Boolean {
        val markerPosition = marker?.position
        var selectedMarker = -1
        for (i in 0..myCafesData.size-1) {
            if (myCafesData[i].latitude == "" || myCafesData[i].longitude == "") {
                continue
            } else {
                if (markerPosition?.latitude == myCafesData[i].latitude.toDouble() && markerPosition.longitude == myCafesData[i].longitude.toDouble()) {
                    selectedMarker = i//Jugement de la position du marqueur
                }
            }
        }
        recyclerView.smoothScrollToPosition(selectedMarker)//scroll
        return false
    }
})

Tâche

Puisque RecyclerView et Marker ne sont pas directement connectés, vous ne pouvez pas changer la taille du marqueur avec Recycler-> Marker. Voulez-vous que les données d'article contiennent des informations RecyclerView et Marker?

Nous vous serions reconnaissants si vous pouviez nous apprendre à résoudre les problèmes ci-dessus. S'il vous plaît!

Épilogue

Cet article est une réimpression de mon blog. Nous mettons à jour les articles de programmation, alors venez nous rendre visite. https://www.imagawahibana.com/

Recommended Posts

Correspondance entre RecyclerView et Marker (Kotlin)
Correspondance entre les fonctions intégrées de Python et Rust
Entre paramétrique et non paramétrique
Correspondance entre l'appel système Unix ʻopen` et la libc` fopen () `
Différence entre processus et travail
Conversion entre unixtime et datetime
Différence entre "categorical_crossentropy" et "sparse_categorical_crossentropy"
Différence entre régression et classification
Coopération entre PTVS et Anaconda
Différence entre np.array et np.arange
Différence entre MicroPython et CPython
Coopération entre py2exe et les outils de configuration
Frontière entre C et Golang
Différence entre ps a et ps -a
Différence entre return et print-Python