2015-10-21 2 views
17

Ich versuche, eine horizontale Liste mit einer RecyclerView, dass, wenn ich den Fokus auf ein Element, erhöhen Sie die Größe dieser. Ich möchte diesen Effekt machen:Wie kann die Größe eines aktuell fokussierten Elements in einem RecyclerView erhöht werden?

Increased item effect

Haben Sie irgendwelche Ideen haben, dies zu erreichen?

+0

mache ich genau das selbe. hat aber keine Auswirkung auf meine 'RecyclerList'. Ich habe eine Bildansicht auf meinem Ansichtshalter und möchte im Fokus größer sein. Hilf mir! –

+0

Hallo @ SadeqShajary, vielleicht sollten Sie den FokusChangeListener auf die Root-Ansicht anstelle der ImageView selbst anwenden. Dies wurde entwickelt und getestet auf Android TV, mit einer Fernbedienung. – Skycorsarius

+3

Bitte bearbeiten Sie die Lösung nicht in der Frage - Sie sollten sie als Antwort veröffentlichen, damit sie mit dem Q & A-Format von Stack Overflow übereinstimmt. – EJoshuaS

Antwort

0

Dank dextor Antwort, ich diese Antwort herausfinden konnte.

ich verwendet habe, die FocusChangeListener und hinzugefügt Animation Staaten die Größe der Ansicht zu ändern:

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

Und den Code für die 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

Wie unterscheidet sich das von meiner Lösung und warum wurde die akzeptierte Antwort (meine) nach fast einem Jahr entfernt? – Sebastiano

9

Ich stelle mir vor, so etwas wie dieses:

  1. Erstellen Sie die horizontale RV
  2. Wenn die ViewHolder Bindung, eine FocusChangeListener an die Stammansicht des
  3. Artikel anhängen Wenn das Element den Fokus erhält, Zunder um es etwas größer zu machen; Wenn der Fokus verloren ist, kehren Sie die Animation zurück.

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

Diese Lösung funktioniert nur für Android TV, aber nicht für die mobilen Geräte ... :-( – Pawan

+1

@Pawan: haben Sie versucht, indem Sie android: focusable = "true" android: focusableInTouchMode = "true" zu Ihrer root-Ansicht in xml –

Verwandte Themen