Unbekannter Animationsname: decelerateInterpolator

Android Studio 1.5 Device Samsung 4.4.2 

Ich versuche, Gegenstände zu beleben, die von einer ArrayList in ein recyclerview geladen wurden. Ich, wenn der Dropdown-Pfeil angeklickt wird, sollte die Elemente animieren (verlangsamen), wenn sie erweitert werden und animieren sollten, wenn sie zusammengebrochen sind. Allerdings erscheinen derzeit die Listenelemente gerade.

Code, der die setAnimation aufruft

  • Integer-Wert in TextView
  • REST-API von einer Android-App aufrufen
  • Android-Komponenten präsentieren / visuelle Führer
  • Wie kann ein Knopf den Fokus bekommen?
  • Android: Herunterladen einer mit NTLM authentifizierungsgeschützten Datei
  • CollapsingToolbarLayout mit mehrzeiligem Titel
  •   @Override public void onBindChildViewHolder(ChatChildViewHolder childViewHolder, int position, Object childListItem) { ChatChildTitles chatChildTitles = (ChatChildTitles)childListItem; childViewHolder.tvChildTitle.setText(chatChildTitles.getTitle()); setAnimation(childViewHolder.cvChildRooms, position); } 

    Code zur Einstellung der Animation

      private void setAnimation(CardView viewToAnimate, int position) { Animation animation = AnimationUtils.loadAnimation(mContext, android.R.anim.fade_in); animation.setInterpolator(mContext, android.R.anim.decelerate_interpolator); viewToAnimate.startAnimation(animation); } 

    Hier sind ein paar Screenshots:

    Im zusammengefallenen Zustand

    Bildbeschreibung hier eingeben

    Nachdem der Pfeil geklickt worden ist, ist die Liste Bildbeschreibung hier eingeben

    Dies ist mein Layout, das ich verwende, das die Zeilen darstellt, die im Recycler angezeigt werden werden:

     <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView android:id="@+id/cvChildRooms" xmlns:card="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" card:cardBackgroundColor="@color/child_header_lighter_grey" card:contentPadding="4dp" card:cardPreventCornerOverlap="true"> <de.hdodenhof.circleimageview.CircleImageView android:id="@+id/profile_image" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical|start" android:src="@drawable/photorace"/> <TextView android:id="@+id/tvChildTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|center" android:text="Coffee Latte Room" android:fontFamily="sans-serif-light" android:textSize="16sp" android:textColor="@android:color/black"/> </android.support.v7.widget.CardView> 

    Ich habe eine Funktion, die die Animation starten sollte.

     private void setAnimation(CardView viewToAnimate, int position) { Animation animation = AnimationUtils.loadAnimation(mContext, android.R.anim.decelerate_interpolator); viewToAnimate.startAnimation(animation); } 

    Ich habe mit dem folgenden getestet, das funktioniert ok mit slide_in_left . Allerdings möchte ich nicht, dass sie von links einrutschen

     Animation animation = AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left); viewToAnimate.startAnimation(animation); 

    Vielen Dank für alle Anregungen,

  • OkHttp, wie man den Anforderungskörper protokolliert
  • Wie pause Handler.postDelayed () Timer auf Android
  • Android 3 - Hinzufügen eines Fragments zu einem LinearLayout: fill_parent funktioniert nicht
  • Verursacht einen java.IllegalStateException-Fehler, keine Aktivität, nur bei der Navigation zu Fragment für die ZWEITE Zeit
  • Asynthese schwerer Gebrauch
  • EditText unterstreichen unterhalb der Texteigenschaft
  • 4 Solutions collect form web for “Unbekannter Animationsname: decelerateInterpolator”

    Wenn du einen Abbremsinterpolator verwenden willst, musst du ihn als Interpolator einstellen, nicht als Animator :

     private void setAnimation(CardView viewToAnimate, int position) { Animation animation = AnimationUtils.loadAnimation(mContext, android.R.anim.fade_in); //change this with your desidered (or custom) animation animation.setInterpolator(mContext, android.R.anim.decelerate_interpolator); viewToAnimate.startAnimation(animation); } 

    AKTUALISIEREN

    Sie sagten, dass Sie com.bignerdranch.android:expandablerecyclerview:2.0.3 verwenden .

    Von den offiziellen Dokumenten der Bibliothek, ist es eindeutig, wie man Erweiterung / Zusammenbruch Animationen zu erstellen :

    Sie können auch eigene Animationen für die Erweiterung erstellen, indem Sie ParentViewHolder#onExpansionToggled(boolean) überschreiben, das für Sie aufgerufen wird, wenn das ItemView erweitert oder zusammengebrochen wird.

    Ich schlage vor, dass Sie sich das offizielle Beispiel der Bibliothek ansehen.

    Sie können nicht decelerate_interpolator weil es keine Animation ist, es ist ein Interpolator:

    Ein Interpolator definiert die Änderungsrate einer Animation. Dadurch können die grundlegenden Animationseffekte (Alpha, Skala, Translate, Rotate) beschleunigt, verzögert, wiederholt usw.

    Referenz:
    http://developer.android.com/reference/android/view/animation/Interpolator.html

    Wie Sie sehen können, sind die XML, die sie beschreiben, ganz anders:

    Quelle von decelerate_interpolator.xml :

     <decelerateInterpolator /> 

    Quelle von slide_in_left.xml :

     <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-50%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_mediumAnimTime" /> </set> 

    Um die Liste zu beleben, während sie sich ausdehnen und zusammenbrechen, sollten Sie einen ItemAnimator von Android verwenden.

    Sie müssen einen benutzerdefinierten itemAnimator einrichten, etwas Ähnliches wie das im folgenden Link:

    https://gist.github.com/ademar111190/dc988c8d899dae0193f7

    Setzen Sie den itemAnimator in die Methode runPendingAnimations auf Ihren verzögerungsinterpolator.

     @Override public void runPendingAnimations() { if (!mViewHolders.isEmpty()) { int animationDuration = 300; AnimatorSet animator; View target; for (final RecyclerView.ViewHolder viewHolder : mViewHolders) { target = viewHolder.itemView; target.setPivotX(target.getMeasuredWidth() / 2); target.setPivotY(target.getMeasuredHeight() / 2); animator = new AnimatorSet(); animator.playTogether( ObjectAnimator.ofFloat(target, "translationX", -target.getMeasuredWidth(), 0.0f), ObjectAnimator.ofFloat(target, "alpha", target.getAlpha(), 1.0f) ); animator.setTarget(target); animator.setDuration(animationDuration); animator.setInterpolator(new DecelerateInterpolator()); animator.setStartDelay((animationDuration * viewHolder.getPosition()) / 10); animator.addListener(new AnimatorListener() { @Override public void onAnimationEnd(Animator animation) { mViewHolders.remove(viewHolder); } }); animator.start(); } } } 

    Dann müssen Sie den itemAnimator auf die Recycler-Ansicht setzen.

    RecyclerView.setItemAnimator (neuer MyItemAnimator ());

    Sie können unten Code verwenden, um das zu tun.

     private void hideViews() { recyclerView.animate().translationY(-recyclerView.getHeight()).setInterpolator(new AccelerateInterpolator(2)); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mFabButton.getLayoutParams(); int fabBottomMargin = lp.bottomMargin; mFabButton.animate().translationY(mFabButton.getHeight()+fabBottomMargin).setInterpolator(new AccelerateInterpolator(2)).start(); } private void showViews() { recyclerView.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)); mFabButton.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); } 

    Sie können diese Methode auf. Klicken Sie auf Ihre Schaltfläche .

    Hoffe, es wird dir helfen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.