Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

309
Views
Cómo encontrar un elemento interno de anclaje en recyclerView

Estoy atascado en un pequeño problema, donde necesito encontrar el elemento de anclaje del elemento visible del centro del recicladorVer

Por favor, compruebe la imagen de abajo para referencia ingrese la descripción de la imagen aquí

debajo del código que estoy usando para encontrar el elemento central de recyclerView

 class CenterItemFinder( private val context: Context, private val layoutManager: LinearLayoutManager, private val callback: CenterItemCallback, private val controlState: Int ) : OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { if (controlState == ALL_STATES || newState == controlState) { val firstVisible = layoutManager.findFirstVisibleItemPosition() val lastVisible = layoutManager.findLastVisibleItemPosition() val itemsCount = lastVisible - firstVisible + 1 val screenCenter = context.resources.displayMetrics.widthPixels / 2 var minCenterOffset = Int.MAX_VALUE var middleItemIndex = 0 for (index in 0 until itemsCount) { val listItem = layoutManager.getChildAt(index) ?: return val leftOffset = listItem.left val rightOffset = listItem.right val centerOffset = Math.abs(leftOffset - screenCenter) + Math.abs(rightOffset - screenCenter) if (minCenterOffset > centerOffset) { minCenterOffset = centerOffset middleItemIndex = index + firstVisible } } callback.scrollFinished(middleItemIndex) } } interface CenterItemCallback { fun scrollFinished(middleElement: Int) } companion object { const val ALL_STATES = 10 } }

Quiero encontrar el elemento de anclaje interno en recyclerView pero no puedo encontrar el elemento interno visible del centro exacto en recyclerView

Puedo encontrar el elemento central visible de RecyclerView pero no puedo encontrar el elemento interno de anclaje

Aquí está el video de referencia para el mismo

https://drive.google.com/file/d/1OIPq-YOFhch6xFpSZGEFZTDHhDisicDg/view?usp=sharing

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La idea es que la vista ancla sea la más cercana al centro:

Primero obtenga la posición x del elemento centrado en la pantalla (es decir, el borde izquierdo), agregue el ancho del elemento para obtener el borde derecho; luego compare eso con el punto central de la pantalla para saber qué borde está más cerca del centro.

Pero primero, necesitamos asociar la instancia de ViewHolder a ese elemento centrado para obtener estas posiciones y acceder a las vistas subyacentes.

Ya obtuvo la posición del elemento centrado ( middleItemIndex ) en RecyclerView dentro de la devolución de llamada onScrollStateChanged() . Luego, para obtener la instancia de ViewHolder asociada para esta posición:

 val holder = recyclerView.findViewHolderForAdapterPosition(middleItemIndex) as MyViewHolder // Cast that to your ViewHolder class // Get the centered item position on the screen val point = IntArray(2) holder.itemView.getLocationOnScreen(point) // or getLocationInWindow(point) val leftEdge = point[0] val rightEdge = leftEdge + holder.itemView.width val screenCenter = resources.displayMetrics.widthPixels / 2 val leftOffset = Math.abs(leftEdge - screenCenter) val rightOffset = Math.abs(rightEdge - screenCenter) // And eventually get the anchor view: val anchorView = if (leftOffset > rightOffset) { // The right view is the anchor holder.itemView.findViewById<...>(R.id.rightItemId) // adjust rightItemId to your most right view id in the RV item } else { // The left view is the anchor holder.itemView.findViewById<...>(R.id.leftItemId) // adjust leftItemId to your most left view id in the RV item }

ACTUALIZAR

usando esta condición si (leftOffset > rightOffset) { puedo detectar el primer y último bloque de recyclerview, el problema es que no puedo detectar el elemento del bloque central (el elemento que tiene...)

Puede dividir el elemento centrado en 3 partes iguales, donde habrá dos bordes para comparar con la posición central de la pantalla:

 // Get the centered item x,y position on the screen val point = IntArray(2) holder.itemView.getLocationOnScreen(point) // or getLocationInWindow(point) val itemWidth = holder.itemView.width // Divide the width into 3 equal parts (two margins) val leftMargin = point[0] + itemWidth / 3 val rightMargin = point[0] + itemWidth * 2 / 3 val anchorView = when { screenCenter > rightMargin -> { // The anchor is the right item holder.itemView.findViewById<..>(R.id.rightItemId) // adjust rightItemId to the most right view id in the RV item } screenCenter > leftMargin -> { // The anchor is the middle item holder.itemView.findViewById<..>(R.id.middleItemId) // adjust rightItemId to the middle view id in the RV item } else -> { // The anchor is the left item holder.itemView.findViewById<..>(R.id.leftItemId) // adjust rightItemId to the most left view id in the RV item } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!