2017-01-19 13 views
0

Ich möchte animierte Sicht auf klicken Sie darauf. Ich animiere diese Ansicht mit AnimatorSet Aber wenn Benutzer scrollen zu diesem Zeitpunkt Status der Animation ist nicht gepflegt oder nicht clearAnimation richtig. Es animiert das Symbol eines anderen Gegenstands. hat jemand eine idee drauf?RecyclerView Re-animieren Ansichten beim Scrollen

Animation Methode:

public static void likeAnimation(Object object) { 
     if (object == null) { 
      return; 
     } 
     AnimatorSet set = new AnimatorSet(); 
     Object myView = object; 
     set.setInterpolator(new LinearInterpolator()); 
     set.playTogether(
       ObjectAnimator.ofFloat(myView, "rotation", 0, 360) 
     ); 
     set.setDuration(500).start(); 
    } 

RecyclerView Code:

@Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    holder.imageView_like.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(final View v) { 
         likeAnimation(v); 
} 

} 
+0

In der Recycler-Ansicht werden die Ansichten wiederverwendet, die vom Layoutmanager übernommen werden. Die Animation kommt beim Scrollen zum nächsten Element. können Sie die Logik schreiben - stoppen Sie die Animation, wenn Sie mit dem Scrollen begonnen haben. Sie haben herausgefunden, ob die Recycleransicht scrollt oder nicht, wenn Sie die 'onScroll()' Methode überschreiben. In diesem stoppen Sie die Animation –

+0

@Navaspk Ja, jedes Mal recycleerView Aufruf 'onCreateViewHolder' also verwende ich' clearAnimation() 'für diese Ansicht und ich angewendet' clearAnimation' auch in 'onViewDetachedFromWindow (ViewHolder Inhaber)' aber immer noch es animiert und Status beibehalten oder Animation stoppen. Wenn möglich, dann Code vorschlagen oder sonst. Vielen Dank. –

Antwort

0

Sie sind nur in der Zeit mit dieser Frage, und ich hoffe, ich bin nicht zu spät. Eine Idee ist hier sehr einfach. Sie müssen bedenken, dass Ihre RecyclerView jede einzelne ViewHolder wiederverwendet, die jemals erstellt wurde. Normalerweise erstellt es ungefähr 7 ~ 8 Elemente, aber es hängt von der Bildschirmgröße ab.

Also, in Ihrem speziellen Fall, wenn Sie einen Artikel per Klick animieren möchten, müssen Sie den Status jedes Artikels in Ihrem RecyclerView verfolgen. Grundsätzlich kann man drei Zustände haben:

  • Enter Zustand oder Ihre sehr Animation. Wenn der Benutzer auf ein Element in der Liste klickt, wird das Element animiert und am Ende der Animation wird der Status des Elements in den Status Animated geändert.

  • Animated Zustand. Dies ist der Status eines Elements, das animiert wurde und diese Animation nicht erneut benötigt. Wenn der Benutzer also nach oben/unten scrollt, müssen Sie lediglich eine Ansicht in den animierten Zustand versetzen. In Ihrem Fall können Sie den folgenden Code versuchen:

    private void animatedState(View view){ 
        //perform the same action but without animation 
        view.setRotation(360); 
    } 
    
  • Default Zustand oder Normalzustand. Das ist View ohne Rotation, nur ein normaler Zustand.
    Zum Beispiel

    private void defaultState(View view){ 
        view.setRotation(0); 
    } 
    

Auch Sie können die Einzelteile zurück auf Klick animieren, wenn ja, Sie einen weiteren Zustand hinzuzufügen haben, die ein Exit Zustand ist, und wechseln Sie dann von diesem Zustand zu der Default Zustand.

Sie können die gesamte Umsetzung dieser Idee durch diese link finden.

Verwandte Themen