RecyclerView와 Marker를 지원(Kotlin)
만들고 싶은 것
RecyclerView를 스크롤하면 그 아이템에 대응하는 Google Map의 Marker로 이동하고, 또 Map상에서 Marker를 탭하면 RecyclerView가 아이템까지 스크롤 해 주는 녀석.
CardView와 Snaphelper도 사용하고 있지만 설명은 생략합니다.
환경
Android Studio
Kotlin
Maps SDK for Android
방법
RecyclerView -> Marker
스크롤량으로 RecyclerView상의 순서를 판정해, 그 아이템의 위치까지 Map를 이동.
//recycler -> marker
recyclerView.addOnScrollListener(object :RecyclerView.OnScrollListener(){//スクロールでマーカーに移動
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {//スクロールした量でposition判定
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))
}
}
})
마커 -> RecyclerView
마커의 순서를 판정하고 그 아이템까지 스크롤.
//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//Markerのposition判定
}
}
}
recyclerView.smoothScrollToPosition(selectedMarker)//scroll
return false
}
})
도전
RecyclerView와 Marker가 직접 연결하고 있는 것은 아니기 때문에, Recycler->Marker로 마커의 사이즈 바꾸거나 할 수 없다.
아이템의 데이터에 RecyclerView와 Marker의 정보를 갖게 합니까?
위의 과제를 해결하는 방법을 교수해 주시면 감사하겠습니다. 부탁드립니다!
후기
이 기사는 내 블로그의 전재입니다.
프로그래밍 기사 등 갱신하고 있으므로 꼭 방문해보세요.
htps //w w. 지금이 와히바나. 코m/
Reference
이 문제에 관하여(RecyclerView와 Marker를 지원(Kotlin)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ImagawaHibana/items/681d8b21b9ca8469262b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)