2015-10-21 9 views
17

Próbuję utworzyć poziomą listę z RecyclerView, że gdy ustawię fokus na przedmiocie, zwiększ jego rozmiar. Chcę, aby ten efekt:Jak zwiększyć rozmiar aktualnie ustawionego przedmiotu na ekranie RecyclerView?

Increased item effect

Czy macie jakieś pomysły, aby osiągnąć ten cel?

+0

Robię dokładnie to samo. ale nie ma wpływu na moją "RecyclerList". Mam widok obrazu na moim uchwycie widoku i chcę być większy po ustawieniu ostrości. Pomóż mi! –

+0

Hi @SadeqShajary, może powinieneś zastosować focusChangeListener do widoku głównego zamiast samego obrazu. Zostało to opracowane i przetestowane na Android TV, za pomocą pilota zdalnego sterowania. – Skycorsarius

+3

Nie należy edytować rozwiązania w pytaniu - należy je opublikować jako odpowiedź, aby była spójna z formatem pytań i odpowiedzi stosu w Stack Overflow. – EJoshuaS

Odpowiedz

0

Dzięki dextor odpowiedzi, mogę dowiedzieć się tę odpowiedź.

Użyłem FocusChangeListener i dodał stany animacji do zmiany rozmiaru widoku:

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

a kod na animacje:

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

Czym różni się to od mojego rozwiązania i dlaczego przyjęta odpowiedź (moja) została usunięta po prawie roku? – Sebastiano

9

Wyobrażam sobie coś takiego:

  1. Tworzenie RV poziomą
  2. Przy wiązaniu ViewHolder, podłącz FocusChangeListener do widoku głównego elementu
  3. Kiedy zyski pozycja koncentrować skalę aby było nieco większe; gdy ostrość zostanie utracona, przywróć animację.

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

To rozwiązanie działa tylko dla Android TV, ale nie dla urządzeń mobilnych ... :-( – Pawan

+1

@Pawan: czy próbowałeś dając android: focusable = "true" android: focusableInTouchMode = "true" do widoku głównego w xml –

Powiązane problemy