2015-10-21 14 views
17

Sto cercando di creare un elenco orizzontale con un RecyclerView, che quando si mette a fuoco un elemento, aumentare la dimensione di questo. Voglio fare questo effetto:Come aumentare la dimensione di un oggetto focalizzato corrente su RecyclerView?

Increased item effect

Avete qualche idea per realizzare questo?

+0

Faccio esattamente la stessa cosa. ma non ha alcun effetto sul mio 'RecyclerList'. Ho una visualizzazione di immagine sul mio titolare di vista e voglio essere più grande quando si concentra. Aiutami! –

+0

Ciao @SadeqShajary, forse dovresti applicare focusChangeListener alla vista radice invece che a imageView. Questo è stato sviluppato e testato su Android TV, usando un telecomando. – Skycorsarius

+3

Si prega di non modificare la soluzione nella domanda - è necessario pubblicarla come risposta per essere coerente con il formato Q & A di Stack Overflow. – EJoshuaS

risposta

0

Grazie a dextor risposta, ho potuto capire questa risposta.

Ho usato il FocusChangeListener e ha aggiunto Uniti Animazione per modificare le dimensioni della 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); 
      } 
     } 
    }); 
} 

E il codice per le anims:

scale_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> 
+0

In che cosa differisce dalla mia soluzione e perché la risposta accettata (la mia) è stata rimossa dopo quasi un anno? – Sebastiano

9

sto immaginando qualcosa di simile:

  1. Creare il RV orizzontale
  2. Quando si associa il ViewHolder, allegare un FocusChangeListener alla vista radice della voce
  3. Quando i guadagni voce si concentrano, scala per renderlo leggermente più grande; quando l'attenzione è persa, ripristina l'animazione.

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 
      } 
     } 
    }); 
    } 
} 
+1

Questa soluzione funziona solo per Android TV, ma non per i dispositivi mobili ... :-( – Pawan

+1

@Pawan: hai provato dando android: focusable = "true" android: focusableInTouchMode = "true" alla tua vista root in xml –