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. J'utilise également CardView et Snaphelper, mais je ne les expliquerai pas.
Android Studio Kotlin Maps SDK for Android
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
}
})
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!
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