Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

226
Visualizações
Restringir el desplazamiento del usuario en RecyclerView

En mi proyecto, uso un RecyclerView que solo quiero desplazar llamando al método startSmoothScroll() de LayoutManager:

 private fun next(){ val layoutManager = pager.layoutManager as BattlePageLayoutManager layoutManager.startSmoothScroll(smoothScroller(layoutManager.findFirstVisibleItemPosition() + 1)) layoutManager.finishScroll() }

No quiero que el usuario pueda desplazarse manualmente, por ejemplo, deslizando el dedo.

Ya traté de lograr esto anulando el método onInterceptTouchEvent() del FrameLayout principal.

 override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { if (ev.actionMasked == MotionEvent.ACTION_DOWN){ startClickTime = System.currentTimeMillis() startX = ev.x startY = ev.y } val allowEvent = (System.currentTimeMillis() - startClickTime) < 1000 && (startX-ev.x).absoluteValue < 15 && (startY-ev.y).absoluteValue < 15 return !allowEvent }

Eso funcionó básicamente, pero ocurrió que después de tocar dos veces la Vista, los usuarios pueden desplazarse por sí mismos.

¿Tienes alguna otra idea para abordar esto?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

¿Intentó anular el método canScrollVertical() en el LayoutManager?

 mLayoutManager = new LinearLayoutManager(getActivity()) { @Override public boolean canScrollVertically() { return false; } };

Editar: cree su propia implementación de RecyclerView que deshabilita el evento táctil mientras se realiza el desplazamiento. Luego, debe cambiar la clase RecyclerView en el archivo xml y Fragment/Activity con él.

Encuentre aquí un ejemplo en Kotlin

 class MyRecyclerView : RecyclerView { constructor(context: Context) : super(context) {} constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {} constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {} override fun onInterceptTouchEvent(e: MotionEvent): Boolean { return if (scrollState != RecyclerView.SCROLL_STATE_IDLE) false else super.onInterceptTouchEvent(e) } }

y en Java

 public class MyRecyclerView extends RecyclerView { public MyRecyclerView(Context context) { super(context); } public MyRecyclerView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onInterceptTouchEvent(MotionEvent e) { if(getScrollState() != SCROLL_STATE_IDLE) return false; return super.onInterceptTouchEvent(e); } }
over 4 years ago · Santiago Trujillo Relatório

0

Es posible que desee bloquear la interacción del usuario con RecyclerView , no con FrameLayout en sí.

Compruebe RecyclerView.OnItemTouchListener .

En su RecyclerView , puede implementar OnItemTouchListener y anular todos los métodos para no hacer nada.

Eso bloqueará la interacción del usuario con RecyclerView , haciendo que el desplazamiento no suceda.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda