[GO] Korrespondenz zwischen RecyclerView und Marker (Kotlin)

Was du machen willst

Wenn Sie durch RecyclerView scrollen, gelangen Sie zu der Markierung von Google Map, die diesem Element entspricht. Wenn Sie auf Markierung auf Karte tippen, blättert RecyclerView zu dem Element. ezgif.com-optimize.gif Ich benutze auch CardView und Snaphelper, aber ich werde sie nicht erklären.

Umgebung

Android Studio Kotlin Maps SDK for Android

Methode

RecyclerView -> Marker Die Reihenfolge in der RecyclerView wird anhand des Bildlaufbetrags beurteilt, und die Karte wird an die Position des Elements verschoben.

//recycler -> marker
recyclerView.addOnScrollListener(object :RecyclerView.OnScrollListener(){//Scrollen Sie, um zur Markierung zu gelangen
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {//Positionsbeurteilung nach dem Umfang des Bildlaufs
        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 Bestimmen Sie die Reihenfolge der Markierungen und scrollen Sie zu diesem Element.

//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//Beurteilung der Markerposition
                }
            }
        }
        recyclerView.smoothScrollToPosition(selectedMarker)//scroll
        return false
    }
})

Aufgabe

Da RecyclerView und Marker nicht direkt miteinander verbunden sind, können Sie die Größe des Markers nicht mit Recycler-> Marker ändern. Möchten Sie, dass die Artikeldaten RecyclerView- und Marker-Informationen enthalten?

Wir würden uns freuen, wenn Sie uns beibringen könnten, wie wir die oben genannten Probleme lösen können. Bitte!

Nachwort

Dieser Artikel ist ein Nachdruck aus meinem Blog. Wir aktualisieren die Programmierartikel. Bitte besuchen Sie uns. https://www.imagawahibana.com/

Recommended Posts

Korrespondenz zwischen RecyclerView und Marker (Kotlin)
Korrespondenz zwischen den in Python integrierten Funktionen und Rust
Zwischen parametrisch und nicht parametrisch
Korrespondenz zwischen dem Unix-Systemaufruf `open` und libc` fopen ()`
Unterschied zwischen Prozess und Job
Konvertierung zwischen Unixtime und Datetime
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen Regression und Klassifikation
Zusammenarbeit zwischen PTVS und Anaconda
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Zusammenarbeit zwischen py2exe und Setup-Tools
Grenze zwischen C und Golang
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python