recyclerview item event current android android-layout android-tv

android - item - ¿Cómo aumentar el tamaño de un elemento enfocado actual en un RecyclerView?



recyclerview event listener (2)

Estoy tratando de hacer una lista horizontal con un RecyclerView , que cuando pongo el foco en un elemento, aumente el tamaño de este. Quiero hacer este efecto:

¿Tienes alguna idea para lograr esto?


Estoy imaginando algo como esto:

  1. Crea el RV horizontal
  2. Cuando enlace el ViewHolder, adjunte un FocusChangeListener a la vista raíz del elemento
  3. Cuando el objeto se enfoca, escálelo para hacerlo un poco más grande; Cuando se pierde el enfoque, revertir la animación.

static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View root) { // bind views // ... // bind focus listener root.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { // run scale animation and make it bigger } else { // run scale animation and make it smaller } } }); } }


Gracias a la respuesta de dextor , pude averiguar esta respuesta.

He utilizado el FocusChangeListener y FocusChangeListener añadido estados de animación para cambiar el tamaño de la vista:

static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(final View root) { // bind views // ... // bind focus listener root.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { // run scale animation and make it bigger Animation anim = AnimationUtils.loadAnimation(context, R.anim.scale_in_tv); root.startAnimation(anim); anim.setFillAfter(true); } else { // run scale animation and make it smaller Animation anim = AnimationUtils.loadAnimation(context, R.anim.scale_out_tv); root.startAnimation(anim); anim.setFillAfter(true); } } }); }

Y el código para los anims:

escala_in_tv:

<scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXScale="100%" android:fromYScale="100%" android:toXScale="110%" android:toYScale="110%" android:pivotX="50%" android:pivotY="50%"> </scale>

scale_out_tv:

<scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="100" android:fromXScale="110%" android:fromYScale="110%" android:toXScale="100%" android:toYScale="100%" android:pivotX="50%" android:pivotY="50%"> </scale>