2015-01-27 3 views
23

Wie animiere ich die RecyclerView, wenn die Elemente zum ersten Mal angezeigt werden und auch wenn der Benutzer scrollt, genau wie es für die Google Plus App oder die Google News Stand App funktioniert.Wie animiert Recyclerview auf Blättern wie Google Plus/Google Kiosk?

Auch ich habe irgendwo gelesen, dass RecyclerView Animation nicht direkt unterstützt, wenn der Benutzer scrollt; Wenn das stimmt, können wir es dann noch tun?

Antwort

54

Ich habe es so gemacht. Könnte jemandem helfen. Ich weiß nicht, ob es der beste Weg ist, aber es funktioniert gut für mich.

UPDATE: zu beheben schnell Verhalten Scrollen, außer Kraft setzen onViewDetachedFromWindow Methode des Adapters und rufen clearAnimation auf der animierten Ansicht (in diesem Fall holder.itemView.clearAnimation()) .Mögen dies:

@Override 
public void onViewDetachedFromWindow(ViewHolder holder) { 
    super.onViewDetachedFromWindow(holder); 
    holder.itemView.clearAnimation(); 
} 

up_from_bottom.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:shareInterpolator="@android:anim/decelerate_interpolator"> 
<translate 
    android:fromXDelta="0%" android:toXDelta="0%" 
    android:fromYDelta="100%" android:toYDelta="0%" 
    android:duration="400" /> 
</set> 

down_from_top.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:shareInterpolator="@android:anim/decelerate_interpolator"> 
<translate 
    android:fromXDelta="0%" android:toXDelta="0%" 
    android:fromYDelta="-100%" android:toYDelta="0%" 
    android:duration="400" /> 
</set> 

Und schließlich diesen Code in onBindViewHolder von recyclerView. Erstellen Sie ein Feld namens lastPosition und initialisieren Sie es auf -1.

Animation animation = AnimationUtils.loadAnimation(context, 
      (position > lastPosition) ? R.anim.up_from_bottom 
        : R.anim.down_from_top); 
    holder.itemView.startAnimation(animation); 
    lastPosition = position; 
+0

Gibt es eine Möglichkeit, mit Scrollen schnell umzugehen es wird vermasselt – naiyu

+0

@naiyu Entschuldigung, keine Ahnung. –

+10

Um schnelles Scrollen zu beheben, implementieren Sie 'onViewDetachedFromWindow' auf dem Adapter und rufen' clearAnimation' in der animierten Ansicht auf (in Ihrem Fall 'holder.itemView'). –

4

Verwenden Sie benutzerdefinierte ItemAnimator mit "Folie nach oben" -Animation für Aktion hinzufügen. Gefällt mir - https://github.com/wasabeef/recyclerview-animators

+0

Ich will nur nicht für Add, möchte ich die Animation zum ersten Mal (von unten nach unten) und auch wenn Sie ser scrollt –

+0

Sie können es auf 2 Arten verwenden .... zum Hinzufügen oder zum Scrollen. – catalin87

+1

@ catalin87 wie zum scrollen verwenden? – helloimyourmind

2

Für down_from_top.xml sollte es

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:shareInterpolator="@android:anim/decelerate_interpolator"> 
<translate 
    android:fromXDelta="0%" android:toXDelta="0%" 
    android:fromYDelta="-100%" android:toYDelta="0%" 
    android:duration="400" /> 
</set> 
1

https://github.com/wasabeef/recyclerview-animators

In meinem Code ist so etwas wie dieses:

import jp.wasabeef.recyclerview.animators.adapters.AlphaInAnimationAdapter; 

.... 

public function populate() { 
    // Get your recicleview 
    rv = (RecyclerView)findViewById(R.id.rv); 
    rv.setHasFixedSize(true); 

    // Populate your cursor with your own method... 
    Cursor myRecycleItems= null; 
    myRecycleItems= mDbHelper.getItems(); 

    //create your 
    itemsAdapter= new ItemsAdapter(myRecycleItems, getApplicationContext()); 


    //Finnaly apply your adapter to RV with AlphaInAnimationAdapter: 
    rv.setAdapter(new AlphaInAnimationAdapter(itemsAdapter)); 

} 

Sie benötigen

Abhängigkeiten zu Ihrem gradle hinzufügen
dependencies { 
    // jCenter 
    ...... 
    your curent dependencies 
    .... 
    compile 'jp.wasabeef:recyclerview-animators:2.0.0' 
} 

Lesen Sie das Dokument https://github.com/wasabeef/recyclerview-animators, um es zu installieren.

+0

Es hat nicht für mich funktioniert RecyclerView RecyclerView = (RecyclerView) rootView.findViewById (R.id.scrollableview); recyclerView.setHasFixedSize (true); recyclerView.setLayoutManager (neuer LinearLayoutManager (getActivity())); recycleView.setAdapter (neuer SlideInBottomAnimationAdapter (new ComplexRecyclerViewAdapter (items))); –

0

ohne fremde Bibliotheken in RecycleView.Adapter auf Verfahren onBindViewHolder Verwendung Animation wie in Beispiel:

 if (position>lastAnimatedPosition) { 


     //set init transitionY to animate from it 
     holder.itemView.setTranslationY(holder.itemView.getHeight()); 

     //animate to orginal position 
     holder.itemView.animate().translationYBy(- holder.itemView.getHeight()).start(); 


     lastAnimatedPosition=position; 
    } 

Above Code von unten in der Liste jede Zeile animieren wird. Die Animation wird nur einmal ausgeführt, aber onBindViewHolder wird beim Scrollen ausgeführt, so dass das erste Scrollen der Liste mit einem Animationseffekt erfolgt.

Sehr wichtig ist im Hinblick auf Initialisierung der Animation zu starten, so in Beispiel i gesetzt:

holder.itemView.setTranslationY(+ Y change); 

dann Rücken zur ursprünglichen Position Animation gehen:

holder.itemView.animate().translationYBy(- Y change).start(); 

Wenn Sie das Alpha tun müssen, dass Weg: