diff --git a/DEV/preview/Telecine_2016-01-09-19-01-46.gif b/DEV/preview/Telecine_2016-01-09-19-01-46.gif new file mode 100644 index 0000000..13b8d63 Binary files /dev/null and b/DEV/preview/Telecine_2016-01-09-19-01-46.gif differ diff --git a/DEV/preview/Telecine_2016-01-09-19-01-46.mp4 b/DEV/preview/Telecine_2016-01-09-19-01-46.mp4 new file mode 100755 index 0000000..e2be07d Binary files /dev/null and b/DEV/preview/Telecine_2016-01-09-19-01-46.mp4 differ diff --git a/README.md b/README.md index 82236f5..1cfcb92 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ #ItemAnimators [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.mikepenz/itemanimators/badge.svg?style=flat)](https://maven-badges.herokuapp.com/maven-central/com.mikepenz/itemanimators) [![Join the chat at https://gitter.im/mikepenz/itemanimators](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mikepenz/itemanimators?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -The **ItemAnimators** library comes with a huge collections of pre-created Animators for your RecyclerView. -It was created so developers can easly animate their RecyclerView. It also takes care about correctly handling all view states so you don't have to. +The **ItemAnimators** library comes with a huge collections of pre-created animators for your `RecyclerView`. It was created so developers can easily animate their `RecyclerView`. +These `Animators` correctly work with all view states and `RecyclerView` states (as the `DefaultItemAnimator` does) > **DISCLAIMER**: this library does not animate items on scroll, just when added, removed, moved, or changed #Preview -##Screenshots + #Include in your project ##Using Maven ```javascript -compile('com.mikepenz:itemanimators:0.1.0-SNAPSHOT@aar') { +compile('com.mikepenz:itemanimators:0.2.0-SNAPSHOT@aar') { transitive = true } @@ -33,6 +33,28 @@ mRecyclerView.setItemAnimator(new ScaleUpAnimator()); //https://github.com/mikepenz/FastAdapter ``` +##Included animators + +* **Simple** + * `AlphaInAnimator` + +* **Resize** + * `ScaleUpAnimator` + * `ScaleXAnimator` + * `ScaleYAnimator` + +* **Move** + * `SlideDownAlphaAnimator` (Best for collapse animations) + * `SlideRightAlphaAnimator` + * `SlideUpAlphaAnimator` + * `SlideLeftAlphaAnimator` + * `SlideInOutTopAnimator` + * `SlideInOutRightAnimator` + * `SlideInOutBottomAnimator` + * `SlideInOutLeftAnimator` + +* more will follow soon... + #Developed By * Mike Penz diff --git a/app/build.gradle b/app/build.gradle index 26afe04..8e3228d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { defaultConfig { minSdkVersion 11 targetSdkVersion 23 - versionCode 10 - versionName '0.1.0-SNAPSHOT' + versionCode 20 + versionName '0.2.0-SNAPSHOT' applicationVariants.all { variant -> variant.outputs.each { output -> @@ -52,10 +52,17 @@ dependencies { //used to generate the drawer on the left //https://github.com/mikepenz/MaterialDrawer - compile('com.mikepenz:materialdrawer:5.0.0.fastAdapter.b5-SNAPSHOT@aar') { + compile('com.mikepenz:materialdrawer:5.0.0.fastAdapter.b7-SNAPSHOT@aar') { transitive = true exclude module: "itemanimators" + exclude module: "fastadapter" } + + // used to fill the RecyclerView with the DrawerItems + // and provides single and multi selection, collapsable items + // https://github.com/mikepenz/FastAdapter + compile 'com.mikepenz:fastadapter:0.7.1@aar' + //used to generate the Open Source section //https://github.com/mikepenz/AboutLibraries compile('com.mikepenz:aboutlibraries:5.3.4@aar') { diff --git a/app/src/main/java/com/mikepenz/itemanimators/app/SampleActivity.java b/app/src/main/java/com/mikepenz/itemanimators/app/SampleActivity.java index 4462a9a..91c8500 100755 --- a/app/src/main/java/com/mikepenz/itemanimators/app/SampleActivity.java +++ b/app/src/main/java/com/mikepenz/itemanimators/app/SampleActivity.java @@ -3,6 +3,7 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; +import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; @@ -128,17 +129,15 @@ public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { //configure our fastAdapter //get our recyclerView and do basic setup mRecyclerView = (RecyclerView) findViewById(R.id.rv); - mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - mRecyclerView.setItemAnimator(new ScaleUpAnimator()); + mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3)); mRecyclerView.setAdapter(mItemAdapter.wrap(mFastAdapter)); - - //add some dummy data - mItemAdapter.add(ImageDummyData.getImages()); + mRecyclerView.setItemAnimator(new AlphaInAnimator()); + mRecyclerView.getItemAnimator().setAddDuration(500); + mRecyclerView.getItemAnimator().setRemoveDuration(500); //restore selections (this has to be done after the items were added mFastAdapter.withSavedInstanceState(savedInstanceState); - /** * selection spinner for the different animtors */ @@ -160,6 +159,14 @@ public void onItemSelected(AdapterView parent, View view, int position, long public void onNothingSelected(AdapterView parent) { } }); + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + //add some dummy data + mItemAdapter.add(ImageDummyData.getImages()); + } + }, 50); } @Override diff --git a/app/src/main/java/com/mikepenz/itemanimators/app/items/SampleItem.java b/app/src/main/java/com/mikepenz/itemanimators/app/items/SampleItem.java deleted file mode 100644 index 7bd57b2..0000000 --- a/app/src/main/java/com/mikepenz/itemanimators/app/items/SampleItem.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.mikepenz.itemanimators.app.items; - -import android.content.Context; -import android.support.annotation.StringRes; -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.widget.TextView; - -import com.mikepenz.fastadapter.ICollapsible; -import com.mikepenz.fastadapter.IItem; -import com.mikepenz.fastadapter.items.AbstractItem; -import com.mikepenz.fastadapter.utils.FastAdapterUIUtils; -import com.mikepenz.fastadapter.utils.ViewHolderFactory; -import com.mikepenz.itemanimators.app.R; -import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialize.util.UIUtils; - -import java.util.List; - -import butterknife.Bind; -import butterknife.ButterKnife; - -/** - * Created by mikepenz on 28.12.15. - */ -public class SampleItem extends AbstractItem implements ICollapsible { - - public String header; - public StringHolder name; - public StringHolder description; - - private List mSubItems; - private boolean mCollapsed = true; - - public SampleItem withHeader(String header) { - this.header = header; - return this; - } - - public SampleItem withName(String Name) { - this.name = new StringHolder(Name); - return this; - } - - public SampleItem withName(@StringRes int NameRes) { - this.name = new StringHolder(NameRes); - return this; - } - - public SampleItem withDescription(String description) { - this.description = new StringHolder(description); - return this; - } - - public SampleItem withDescription(@StringRes int descriptionRes) { - this.description = new StringHolder(descriptionRes); - return this; - } - - @Override - public boolean isCollapsed() { - return mCollapsed; - } - - @Override - public SampleItem withCollapsed(boolean collapsed) { - mCollapsed = collapsed; - return this; - } - - @Override - public List getSubItems() { - return mSubItems; - } - - public SampleItem withSubItems(List subItems) { - this.mSubItems = subItems; - return this; - } - - @Override - public int getType() { - return R.id.fastadapter_sampleitem_id; - } - - @Override - public int getLayoutRes() { - return R.layout.sample_item; - } - - @Override - public void bindView(RecyclerView.ViewHolder holder) { - Context ctx = holder.itemView.getContext(); - //get our viewHolder - ViewHolder viewHolder = (ViewHolder) holder; - - //set the item selected if it is - viewHolder.itemView.setSelected(isSelected()); - //set itself as tag. (not required) - viewHolder.itemView.setTag(this); - - //set the background for the item - UIUtils.setBackground(viewHolder.view, FastAdapterUIUtils.getSelectableBackground(ctx, UIUtils.getThemeColor(ctx, R.attr.colorPrimary))); - //set the text for the name - StringHolder.applyTo(name, viewHolder.name); - //set the text for the description or hide - StringHolder.applyToOrHide(description, viewHolder.description); - } - - @Override - public ViewHolderFactory getFactory() { - return new ItemFactory(); - } - - public static class ItemFactory implements ViewHolderFactory { - public ViewHolder create(View v) { - return new ViewHolder(v); - } - } - - protected static class ViewHolder extends RecyclerView.ViewHolder { - protected View view; - @Bind(R.id.material_drawer_name) - TextView name; - @Bind(R.id.material_drawer_description) - TextView description; - - public ViewHolder(View view) { - super(view); - ButterKnife.bind(this, view); - this.view = view; - } - } -} diff --git a/app/src/main/res/layout/sample_item.xml b/app/src/main/res/layout/sample_item.xml deleted file mode 100755 index f7dda3a..0000000 --- a/app/src/main/res/layout/sample_item.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 0c11840..22d6f80 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,8 +19,8 @@ org.gradle.daemon=true org.gradle.parallel=true # Maven stuff -VERSION_NAME=0.1.0-SNAPSHOT -VERSION_CODE=10 +VERSION_NAME=0.2.0-SNAPSHOT +VERSION_CODE=20 GROUP=com.mikepenz POM_DESCRIPTION=ItemAnimators Library diff --git a/library/build.gradle b/library/build.gradle index 50db719..8ca8826 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -8,8 +8,8 @@ android { defaultConfig { minSdkVersion 10 targetSdkVersion 23 - versionCode 10 - versionName '0.1.0-SNAPSHOT' + versionCode 20 + versionName '0.2.0-SNAPSHOT' } buildTypes { release { diff --git a/library/src/main/java/com/mikepenz/itemanimators/BaseItemAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/BaseItemAnimator.java index d75a370..eb1203a 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/BaseItemAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/BaseItemAnimator.java @@ -239,8 +239,7 @@ public boolean animateRemove(final ViewHolder holder) { } private void animateRemoveImpl(final ViewHolder holder) { - final View view = holder.itemView; - final ViewPropertyAnimatorCompat animation = removeAnimation(view); + final ViewPropertyAnimatorCompat animation = removeAnimation(holder); mRemoveAnimations.add(holder); animation.setListener(new VpaListenerAdapter() { @Override @@ -251,7 +250,7 @@ public void onAnimationStart(View view) { @Override public void onAnimationEnd(View view) { animation.setListener(null); - removeAnimationCleanup(view); + removeAnimationCleanup(holder); dispatchRemoveFinished(holder); mRemoveAnimations.remove(holder); dispatchFinishedWhenDone(); @@ -259,21 +258,20 @@ public void onAnimationEnd(View view) { }).start(); } - abstract public ViewPropertyAnimatorCompat removeAnimation(View view); + abstract public ViewPropertyAnimatorCompat removeAnimation(ViewHolder holder); - abstract public void removeAnimationCleanup(View view); + abstract public void removeAnimationCleanup(ViewHolder holder); @Override public boolean animateAdd(final ViewHolder holder) { resetAnimation(holder); - addAnimationPrepare(holder.itemView); + addAnimationPrepare(holder); mPendingAdditions.add(holder); return true; } private void animateAddImpl(final ViewHolder holder) { - final View view = holder.itemView; - final ViewPropertyAnimatorCompat animation = addAnimation(view); + final ViewPropertyAnimatorCompat animation = addAnimation(holder); mAddAnimations.add(holder); animation. setListener(new VpaListenerAdapter() { @@ -284,7 +282,7 @@ public void onAnimationStart(View view) { @Override public void onAnimationCancel(View view) { - addAnimationCleanup(view); + addAnimationCleanup(holder); } @Override @@ -293,6 +291,7 @@ public void onAnimationEnd(View view) { dispatchAddFinished(holder); mAddAnimations.remove(holder); dispatchFinishedWhenDone(); + addAnimationCleanup(holder); } }).start(); } @@ -300,24 +299,24 @@ public void onAnimationEnd(View view) { /** * the animation to prepare the view before the add animation is run * - * @param view + * @param holder */ - abstract public void addAnimationPrepare(View view); + abstract public void addAnimationPrepare(ViewHolder holder); /** * the animation for adding a view * - * @param view + * @param holder * @return */ - abstract public ViewPropertyAnimatorCompat addAnimation(View view); + abstract public ViewPropertyAnimatorCompat addAnimation(ViewHolder holder); /** * the cleanup method if the animation needs to be stopped. and tro prepare for the next view * - * @param view + * @param holder */ - abstract void addAnimationCleanup(View view); + abstract void addAnimationCleanup(ViewHolder holder); @Override public boolean animateMove(final ViewHolder holder, int fromX, int fromY, @@ -403,7 +402,7 @@ private void animateChangeImpl(final ChangeInfo changeInfo) { final ViewHolder newHolder = changeInfo.newHolder; final View newView = newHolder != null ? newHolder.itemView : null; if (view != null) { - final ViewPropertyAnimatorCompat oldViewAnim = changeOldAnimation(view, changeInfo); + final ViewPropertyAnimatorCompat oldViewAnim = changeOldAnimation(holder, changeInfo); mChangeAnimations.add(changeInfo.oldHolder); oldViewAnim.setListener(new VpaListenerAdapter() { @Override @@ -414,7 +413,7 @@ public void onAnimationStart(View view) { @Override public void onAnimationEnd(View view) { oldViewAnim.setListener(null); - changeAnimationCleanup(view); + changeAnimationCleanup(holder); ViewCompat.setTranslationX(view, 0); ViewCompat.setTranslationY(view, 0); dispatchChangeFinished(changeInfo.oldHolder, true); @@ -424,7 +423,7 @@ public void onAnimationEnd(View view) { }).start(); } if (newView != null) { - final ViewPropertyAnimatorCompat newViewAnimation = changeNewAnimation(newView); + final ViewPropertyAnimatorCompat newViewAnimation = changeNewAnimation(newHolder); mChangeAnimations.add(changeInfo.newHolder); newViewAnimation.setListener(new VpaListenerAdapter() { @Override @@ -435,7 +434,7 @@ public void onAnimationStart(View view) { @Override public void onAnimationEnd(View view) { newViewAnimation.setListener(null); - changeAnimationCleanup(newView); + changeAnimationCleanup(newHolder); ViewCompat.setTranslationX(newView, 0); ViewCompat.setTranslationY(newView, 0); dispatchChangeFinished(changeInfo.newHolder, false); @@ -480,25 +479,25 @@ public void changeAnimation(ViewHolder oldHolder, ViewHolder newHolder, int from /** * the animation for removing the old view * - * @param view + * @param holder * @return */ - abstract public ViewPropertyAnimatorCompat changeOldAnimation(View view, ChangeInfo changeInfo); + abstract public ViewPropertyAnimatorCompat changeOldAnimation(ViewHolder holder, ChangeInfo changeInfo); /** * the animation for changing the new view * - * @param view + * @param holder * @return */ - abstract public ViewPropertyAnimatorCompat changeNewAnimation(View view); + abstract public ViewPropertyAnimatorCompat changeNewAnimation(ViewHolder holder); /** * the cleanup method if the animation needs to be stopped. and tro prepare for the next view * - * @param view + * @param holder */ - abstract public void changeAnimationCleanup(View view); + abstract public void changeAnimationCleanup(ViewHolder holder); private void endChangeAnimation(List infoList, ViewHolder item) { for (int i = infoList.size() - 1; i >= 0; i--) { @@ -530,7 +529,7 @@ private boolean endChangeAnimationIfNecessary(ChangeInfo changeInfo, ViewHolder } else { return false; } - changeAnimationCleanup(item.itemView); + changeAnimationCleanup(item); ViewCompat.setTranslationX(item.itemView, 0); ViewCompat.setTranslationY(item.itemView, 0); dispatchChangeFinished(item, oldItem); @@ -538,7 +537,7 @@ private boolean endChangeAnimationIfNecessary(ChangeInfo changeInfo, ViewHolder } @Override - public void endAnimation(ViewHolder item) { + public void endAnimation(final ViewHolder item) { final View view = item.itemView; // this will trigger end callback which should set properties to their target values. ViewCompat.animate(view).cancel(); @@ -554,11 +553,11 @@ public void endAnimation(ViewHolder item) { } endChangeAnimation(mPendingChanges, item); if (mPendingRemovals.remove(item)) { - removeAnimationCleanup(view); + removeAnimationCleanup(item); dispatchRemoveFinished(item); } if (mPendingAdditions.remove(item)) { - addAnimationCleanup(view); + addAnimationCleanup(item); dispatchAddFinished(item); } @@ -588,7 +587,7 @@ public void endAnimation(ViewHolder item) { for (int i = mAdditionsList.size() - 1; i >= 0; i--) { ArrayList additions = mAdditionsList.get(i); if (additions.remove(item)) { - addAnimationCleanup(view); + addAnimationCleanup(item); dispatchAddFinished(item); if (additions.isEmpty()) { mAdditionsList.remove(i); @@ -675,7 +674,7 @@ public void endAnimations() { for (int i = count - 1; i >= 0; i--) { ViewHolder item = mPendingAdditions.get(i); View view = item.itemView; - addAnimationCleanup(view); + addAnimationCleanup(item); dispatchAddFinished(item); mPendingAdditions.remove(i); } @@ -712,7 +711,7 @@ public void endAnimations() { for (int j = count - 1; j >= 0; j--) { ViewHolder item = additions.get(j); View view = item.itemView; - addAnimationCleanup(view); + addAnimationCleanup(item); dispatchAddFinished(item); additions.remove(j); if (additions.isEmpty()) { diff --git a/library/src/main/java/com/mikepenz/itemanimators/BaseScaleAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/BaseScaleAnimator.java index 163f42d..ccd62ce 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/BaseScaleAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/BaseScaleAnimator.java @@ -2,7 +2,6 @@ import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; -import android.view.View; /** * Created by mikepenz on 08.01.16. @@ -11,7 +10,7 @@ public abstract class BaseScaleAnimator extends BaseItemAnimator { public void changeAnimation(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromX, int fromY, int toX, int toY) { final float prevTranslationX = ViewCompat.getTranslationX(oldHolder.itemView); final float prevTranslationY = ViewCompat.getTranslationY(oldHolder.itemView); - final float prevValue = changeAnimationPrepare1(oldHolder.itemView); + final float prevValue = changeAnimationPrepare1(oldHolder); resetAnimation(oldHolder); int deltaX = (int) (toX - fromX - prevTranslationX); int deltaY = (int) (toY - fromY - prevTranslationY); @@ -19,34 +18,34 @@ public void changeAnimation(RecyclerView.ViewHolder oldHolder, RecyclerView.View ViewCompat.setTranslationX(oldHolder.itemView, prevTranslationX); ViewCompat.setTranslationY(oldHolder.itemView, prevTranslationY); - changeAnimationPrepare2(oldHolder.itemView, prevValue); + changeAnimationPrepare2(oldHolder, prevValue); if (newHolder != null) { // carry over translation values resetAnimation(newHolder); ViewCompat.setTranslationX(newHolder.itemView, -deltaX); ViewCompat.setTranslationY(newHolder.itemView, -deltaY); - changeAnimationPrepare3(newHolder.itemView); + changeAnimationPrepare3(newHolder); } } /** - * @param view + * @param holder * @return the default value for the animatd attribute */ - abstract public float changeAnimationPrepare1(View view); + abstract public float changeAnimationPrepare1(RecyclerView.ViewHolder holder); /** * animates the view to the previous default value * - * @param view + * @param holder * @param prevValue the previous value */ - abstract public void changeAnimationPrepare2(View view, float prevValue); + abstract public void changeAnimationPrepare2(RecyclerView.ViewHolder holder, float prevValue); /** * resets the value * - * @param view + * @param holder */ - abstract public void changeAnimationPrepare3(View view); + abstract public void changeAnimationPrepare3(RecyclerView.ViewHolder holder); } diff --git a/library/src/main/java/com/mikepenz/itemanimators/DefaultAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/DefaultAnimator.java index 62a32b2..aaa29d5 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/DefaultAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/DefaultAnimator.java @@ -1,8 +1,9 @@ package com.mikepenz.itemanimators; + import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. @@ -10,38 +11,38 @@ public class DefaultAnimator extends BaseItemAnimator { // ADD ANIMATION METHODS - public void addAnimationPrepare(View view) { - ViewCompat.setAlpha(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 0); } - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).alpha(1).setDuration(getAddDuration()).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).alpha(1).setDuration(getAddDuration()).setInterpolator(getInterpolator()); } - public void addAnimationCleanup(View view) { - ViewCompat.setAlpha(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 1); } // REMOVE ANIMATION METHODS - public ViewPropertyAnimatorCompat removeAnimation(View view) { - return ViewCompat.animate(view).setDuration(getRemoveDuration()).alpha(0).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).setDuration(getRemoveDuration()).alpha(0).setInterpolator(getInterpolator()); } - public void removeAnimationCleanup(View view) { - ViewCompat.setAlpha(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 1); } // CHANGE ANIMATION METHODS - public ViewPropertyAnimatorCompat changeOldAnimation(View view, ChangeInfo changeInfo) { - return ViewCompat.animate(view).setDuration(getChangeDuration()).alpha(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat changeOldAnimation(RecyclerView.ViewHolder holder, ChangeInfo changeInfo) { + return ViewCompat.animate(holder.itemView).setDuration(getChangeDuration()).alpha(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY).setInterpolator(getInterpolator()); } - public ViewPropertyAnimatorCompat changeNewAnimation(View view) { - return ViewCompat.animate(view).translationX(0).translationY(0).setDuration(getChangeDuration()).alpha(1).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat changeNewAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationX(0).translationY(0).setDuration(getChangeDuration()).alpha(1).setInterpolator(getInterpolator()); } - public void changeAnimationCleanup(View view) { - ViewCompat.setAlpha(view, 1); + public void changeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 1); } } diff --git a/library/src/main/java/com/mikepenz/itemanimators/ScaleUpAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/ScaleUpAnimator.java index d851ee4..25d891e 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/ScaleUpAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/ScaleUpAnimator.java @@ -2,59 +2,59 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. */ public class ScaleUpAnimator extends BaseScaleAnimator { - public void addAnimationPrepare(View view) { - ViewCompat.setScaleX(view, 0); - ViewCompat.setScaleY(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 0); + ViewCompat.setScaleY(holder.itemView, 0); } - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).scaleX(1).scaleY(1).setDuration(getAddDuration()).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).scaleX(1).scaleY(1).setDuration(getAddDuration()).setInterpolator(getInterpolator()); } - public void addAnimationCleanup(View view) { - ViewCompat.setScaleX(view, 1); - ViewCompat.setScaleY(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 1); + ViewCompat.setScaleY(holder.itemView, 1); } - public ViewPropertyAnimatorCompat removeAnimation(View view) { - return ViewCompat.animate(view).setDuration(getRemoveDuration()).scaleX(0).scaleY(0).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).setDuration(getRemoveDuration()).scaleX(0).scaleY(0).setInterpolator(getInterpolator()); } - public void removeAnimationCleanup(View view) { - ViewCompat.setScaleX(view, 1); - ViewCompat.setScaleY(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 1); + ViewCompat.setScaleY(holder.itemView, 1); } - public float changeAnimationPrepare1(View view) { - return ViewCompat.getScaleX(view); + public float changeAnimationPrepare1(RecyclerView.ViewHolder holder) { + return ViewCompat.getScaleX(holder.itemView); } - public void changeAnimationPrepare2(View view, float prevValue) { - ViewCompat.setScaleX(view, prevValue); + public void changeAnimationPrepare2(RecyclerView.ViewHolder holder, float prevValue) { + ViewCompat.setScaleX(holder.itemView, prevValue); } - public void changeAnimationPrepare3(View view) { - ViewCompat.setScaleX(view, 0); - ViewCompat.setScaleY(view, 0); + public void changeAnimationPrepare3(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 0); + ViewCompat.setScaleY(holder.itemView, 0); } - public ViewPropertyAnimatorCompat changeOldAnimation(View view, ChangeInfo changeInfo) { - return ViewCompat.animate(view).setDuration(getChangeDuration()).scaleX(0).scaleY(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat changeOldAnimation(RecyclerView.ViewHolder holder, ChangeInfo changeInfo) { + return ViewCompat.animate(holder.itemView).setDuration(getChangeDuration()).scaleX(0).scaleY(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY).setInterpolator(getInterpolator()); } - public ViewPropertyAnimatorCompat changeNewAnimation(View view) { - return ViewCompat.animate(view).translationX(0).translationY(0).setDuration(getChangeDuration()).scaleX(1).scaleY(1).setInterpolator(getInterpolator()); + public ViewPropertyAnimatorCompat changeNewAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationX(0).translationY(0).setDuration(getChangeDuration()).scaleX(1).scaleY(1).setInterpolator(getInterpolator()); } - public void changeAnimationCleanup(View view) { - ViewCompat.setScaleX(view, 1); - ViewCompat.setScaleY(view, 1); + public void changeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 1); + ViewCompat.setScaleY(holder.itemView, 1); } } diff --git a/library/src/main/java/com/mikepenz/itemanimators/ScaleXAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/ScaleXAnimator.java index 238448c..eec7078 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/ScaleXAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/ScaleXAnimator.java @@ -2,56 +2,56 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. */ public class ScaleXAnimator extends BaseScaleAnimator { - public void addAnimationPrepare(View view) { - ViewCompat.setScaleX(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 0); } - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).scaleX(1).setDuration(getAddDuration()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).scaleX(1).setDuration(getAddDuration()); } - public void addAnimationCleanup(View view) { - ViewCompat.setScaleX(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 1); } - public ViewPropertyAnimatorCompat removeAnimation(View view) { - final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); return animation.setDuration(getRemoveDuration()).scaleX(0); } - public void removeAnimationCleanup(View view) { - ViewCompat.setScaleX(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 1); } - public float changeAnimationPrepare1(View view) { - return ViewCompat.getScaleX(view); + public float changeAnimationPrepare1(RecyclerView.ViewHolder holder) { + return ViewCompat.getScaleX(holder.itemView); } - public void changeAnimationPrepare2(View view, float prevValue) { - ViewCompat.setScaleX(view, prevValue); + public void changeAnimationPrepare2(RecyclerView.ViewHolder holder, float prevValue) { + ViewCompat.setScaleX(holder.itemView, prevValue); } - public void changeAnimationPrepare3(View view) { - ViewCompat.setScaleX(view, 0); + public void changeAnimationPrepare3(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 0); } - public ViewPropertyAnimatorCompat changeOldAnimation(View view, ChangeInfo changeInfo) { - return ViewCompat.animate(view).setDuration(getChangeDuration()).scaleX(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY); + public ViewPropertyAnimatorCompat changeOldAnimation(RecyclerView.ViewHolder holder, ChangeInfo changeInfo) { + return ViewCompat.animate(holder.itemView).setDuration(getChangeDuration()).scaleX(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY); } - public ViewPropertyAnimatorCompat changeNewAnimation(View view) { - return ViewCompat.animate(view).translationX(0).translationY(0).setDuration(getChangeDuration()).scaleX(1); + public ViewPropertyAnimatorCompat changeNewAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationX(0).translationY(0).setDuration(getChangeDuration()).scaleX(1); } - public void changeAnimationCleanup(View view) { - ViewCompat.setScaleX(view, 1); + public void changeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleX(holder.itemView, 1); } } diff --git a/library/src/main/java/com/mikepenz/itemanimators/ScaleYAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/ScaleYAnimator.java index 09044ab..117a126 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/ScaleYAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/ScaleYAnimator.java @@ -2,56 +2,56 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. */ public class ScaleYAnimator extends BaseScaleAnimator { - public void addAnimationPrepare(View view) { - ViewCompat.setScaleY(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleY(holder.itemView, 0); } - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).scaleY(1).setDuration(getAddDuration()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).scaleY(1).setDuration(getAddDuration()); } - public void addAnimationCleanup(View view) { - ViewCompat.setScaleY(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleY(holder.itemView, 1); } - public ViewPropertyAnimatorCompat removeAnimation(View view) { - final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); return animation.setDuration(getRemoveDuration()).scaleY(0); } - public void removeAnimationCleanup(View view) { - ViewCompat.setScaleY(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleY(holder.itemView, 1); } - public float changeAnimationPrepare1(View view) { - return ViewCompat.getScaleY(view); + public float changeAnimationPrepare1(RecyclerView.ViewHolder holder) { + return ViewCompat.getScaleY(holder.itemView); } - public void changeAnimationPrepare2(View view, float prevValue) { - ViewCompat.setScaleY(view, prevValue); + public void changeAnimationPrepare2(RecyclerView.ViewHolder holder, float prevValue) { + ViewCompat.setScaleY(holder.itemView, prevValue); } - public void changeAnimationPrepare3(View view) { - ViewCompat.setScaleY(view, 0); + public void changeAnimationPrepare3(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleY(holder.itemView, 0); } - public ViewPropertyAnimatorCompat changeOldAnimation(View view, ChangeInfo changeInfo) { - return ViewCompat.animate(view).setDuration(getChangeDuration()).scaleY(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY); + public ViewPropertyAnimatorCompat changeOldAnimation(RecyclerView.ViewHolder holder, ChangeInfo changeInfo) { + return ViewCompat.animate(holder.itemView).setDuration(getChangeDuration()).scaleY(0).translationX(changeInfo.toX - changeInfo.fromX).translationY(changeInfo.toY - changeInfo.fromY); } - public ViewPropertyAnimatorCompat changeNewAnimation(View view) { - return ViewCompat.animate(view).translationX(0).translationY(0).setDuration(getChangeDuration()).scaleY(1); + public ViewPropertyAnimatorCompat changeNewAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationX(0).translationY(0).setDuration(getChangeDuration()).scaleY(1); } - public void changeAnimationCleanup(View view) { - ViewCompat.setScaleY(view, 1); + public void changeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setScaleY(holder.itemView, 1); } } diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideDownAlphaAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideDownAlphaAnimator.java index 4492042..4b2436e 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/SlideDownAlphaAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideDownAlphaAnimator.java @@ -2,27 +2,27 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. */ public class SlideDownAlphaAnimator extends DefaultAnimator { @Override - public void addAnimationPrepare(View view) { - ViewCompat.setTranslationY(view, -view.getHeight()); - ViewCompat.setAlpha(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, -holder.itemView.getHeight()); + ViewCompat.setAlpha(holder.itemView, 0); } @Override - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).translationY(0).alpha(1).setDuration(getMoveDuration()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationY(0).alpha(1).setDuration(getMoveDuration()).setInterpolator(getInterpolator()); } @Override - public void addAnimationCleanup(View view) { - ViewCompat.setTranslationY(view, 0); - ViewCompat.setAlpha(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } @Override @@ -36,14 +36,14 @@ public long getRemoveDelay(long remove, long move, long change) { } @Override - public ViewPropertyAnimatorCompat removeAnimation(View view) { - final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); - return animation.setDuration(getMoveDuration()).alpha(0).translationY(-view.getHeight()); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationY(-holder.itemView.getHeight()).setInterpolator(getInterpolator()); } @Override - public void removeAnimationCleanup(View view) { - ViewCompat.setTranslationY(view, 0); - ViewCompat.setAlpha(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } } diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideInOutBottomAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutBottomAnimator.java new file mode 100644 index 0000000..97ce780 --- /dev/null +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutBottomAnimator.java @@ -0,0 +1,70 @@ +package com.mikepenz.itemanimators; + +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorCompat; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by mikepenz on 08.01.16. + * Base for this animator thanks to @gabrielemariotti - https://github.com/gabrielemariotti/RecyclerViewItemAnimators + */ +public class SlideInOutBottomAnimator extends DefaultAnimator { + + private float mDeltaY; + private RecyclerView mRecyclerView; + + public SlideInOutBottomAnimator(RecyclerView recyclerView) { + mRecyclerView = recyclerView; + } + + @Override + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + retrieveItemPosition(holder); + ViewCompat.setTranslationY(holder.itemView, -mDeltaY); + ViewCompat.setTranslationZ(holder.itemView, 100); + } + + @Override + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + return ViewCompat.animate(view).translationY(0).alpha(1).setDuration(getAddDuration()); + } + + @Override + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + @Override + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationZ(holder.itemView, 100); + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationY(-mDeltaY); + } + + @Override + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + + private void retrieveItemPosition(final RecyclerView.ViewHolder holder) { + mDeltaY = mRecyclerView.getHeight() - mRecyclerView.getLayoutManager().getDecoratedTop(holder.itemView); + } + + @Override + public long getAddDelay(long remove, long move, long change) { + return 0; + } + + @Override + public long getRemoveDelay(long remove, long move, long change) { + return remove / 2; + } + +} diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideInOutLeftAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutLeftAnimator.java new file mode 100644 index 0000000..57fe6e1 --- /dev/null +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutLeftAnimator.java @@ -0,0 +1,70 @@ +package com.mikepenz.itemanimators; + +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorCompat; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by mikepenz on 08.01.16. + * Base for this animator thanks to @gabrielemariotti - https://github.com/gabrielemariotti/RecyclerViewItemAnimators + */ +public class SlideInOutLeftAnimator extends DefaultAnimator { + + private float mDeltaX; + private RecyclerView mRecyclerView; + + public SlideInOutLeftAnimator(RecyclerView recyclerView) { + mRecyclerView = recyclerView; + } + + @Override + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + retrieveItemPosition(holder); + ViewCompat.setTranslationX(holder.itemView, -mDeltaX); + ViewCompat.setTranslationZ(holder.itemView, 100); + } + + @Override + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + return ViewCompat.animate(view).translationX(0).alpha(1).setDuration(getAddDuration()); + } + + @Override + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + @Override + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationZ(holder.itemView, 100); + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationX(-mDeltaX); + } + + @Override + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + + private void retrieveItemPosition(final RecyclerView.ViewHolder holder) { + mDeltaX = mRecyclerView.getWidth() - mRecyclerView.getLayoutManager().getDecoratedLeft(holder.itemView); + } + + @Override + public long getAddDelay(long remove, long move, long change) { + return 0; + } + + @Override + public long getRemoveDelay(long remove, long move, long change) { + return remove / 2; + } + +} diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideInOutRightAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutRightAnimator.java new file mode 100644 index 0000000..430c929 --- /dev/null +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutRightAnimator.java @@ -0,0 +1,70 @@ +package com.mikepenz.itemanimators; + +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorCompat; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by mikepenz on 08.01.16. + * Base for this animator thanks to @gabrielemariotti - https://github.com/gabrielemariotti/RecyclerViewItemAnimators + */ +public class SlideInOutRightAnimator extends DefaultAnimator { + + private float mDeltaX; + private RecyclerView mRecyclerView; + + public SlideInOutRightAnimator(RecyclerView recyclerView) { + mRecyclerView = recyclerView; + } + + @Override + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + retrieveItemPosition(holder); + ViewCompat.setTranslationX(holder.itemView, +mDeltaX); + ViewCompat.setTranslationZ(holder.itemView, 100); + } + + @Override + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + return ViewCompat.animate(view).translationX(0).alpha(1).setDuration(getAddDuration()); + } + + @Override + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + @Override + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationZ(holder.itemView, 100); + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationX(+mDeltaX); + } + + @Override + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + + private void retrieveItemPosition(final RecyclerView.ViewHolder holder) { + mDeltaX = mRecyclerView.getWidth() - mRecyclerView.getLayoutManager().getDecoratedLeft(holder.itemView); + } + + @Override + public long getAddDelay(long remove, long move, long change) { + return 0; + } + + @Override + public long getRemoveDelay(long remove, long move, long change) { + return remove / 2; + } + +} diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideInOutTopAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutTopAnimator.java new file mode 100644 index 0000000..5f2de16 --- /dev/null +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideInOutTopAnimator.java @@ -0,0 +1,70 @@ +package com.mikepenz.itemanimators; + +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorCompat; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by mikepenz on 08.01.16. + * Base for this animator thanks to @gabrielemariotti - https://github.com/gabrielemariotti/RecyclerViewItemAnimators + */ +public class SlideInOutTopAnimator extends DefaultAnimator { + + private float mDeltaY; + private RecyclerView mRecyclerView; + + public SlideInOutTopAnimator(RecyclerView recyclerView) { + mRecyclerView = recyclerView; + } + + @Override + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + retrieveItemPosition(holder); + ViewCompat.setTranslationY(holder.itemView, +mDeltaY); + ViewCompat.setTranslationZ(holder.itemView, 100); + } + + @Override + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + final View view = holder.itemView; + return ViewCompat.animate(view).translationY(0).alpha(1).setDuration(getAddDuration()); + } + + @Override + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + @Override + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationZ(holder.itemView, 100); + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationY(+mDeltaY); + } + + @Override + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); + ViewCompat.setTranslationZ(holder.itemView, 1); + } + + + private void retrieveItemPosition(final RecyclerView.ViewHolder holder) { + mDeltaY = mRecyclerView.getHeight() - mRecyclerView.getLayoutManager().getDecoratedTop(holder.itemView); + } + + @Override + public long getAddDelay(long remove, long move, long change) { + return 0; + } + + @Override + public long getRemoveDelay(long remove, long move, long change) { + return remove / 2; + } + +} diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideLeftAlphaAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideLeftAlphaAnimator.java index 43f0e74..e7179e0 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/SlideLeftAlphaAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideLeftAlphaAnimator.java @@ -2,27 +2,27 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. */ public class SlideLeftAlphaAnimator extends DefaultAnimator { @Override - public void addAnimationPrepare(View view) { - ViewCompat.setTranslationX(view, view.getWidth()); - ViewCompat.setAlpha(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, holder.itemView.getWidth()); + ViewCompat.setAlpha(holder.itemView, 0); } @Override - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).translationX(0).alpha(1).setDuration(getMoveDuration()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationX(0).alpha(1).setDuration(getMoveDuration()).setInterpolator(getInterpolator()); } @Override - public void addAnimationCleanup(View view) { - ViewCompat.setTranslationX(view, 0); - ViewCompat.setAlpha(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } @Override @@ -36,14 +36,14 @@ public long getRemoveDelay(long remove, long move, long change) { } @Override - public ViewPropertyAnimatorCompat removeAnimation(View view) { - final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); - return animation.setDuration(getMoveDuration()).alpha(0).translationX(view.getWidth()); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationX(holder.itemView.getWidth()).setInterpolator(getInterpolator()); } @Override - public void removeAnimationCleanup(View view) { - ViewCompat.setTranslationX(view, 0); - ViewCompat.setAlpha(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } } diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideRightAlphaAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideRightAlphaAnimator.java index fa132e1..0c7379e 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/SlideRightAlphaAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideRightAlphaAnimator.java @@ -2,27 +2,27 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. */ public class SlideRightAlphaAnimator extends DefaultAnimator { @Override - public void addAnimationPrepare(View view) { - ViewCompat.setTranslationX(view, -view.getWidth()); - ViewCompat.setAlpha(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, -holder.itemView.getWidth()); + ViewCompat.setAlpha(holder.itemView, 0); } @Override - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).translationX(0).alpha(1).setDuration(getMoveDuration()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationX(0).alpha(1).setDuration(getMoveDuration()).setInterpolator(getInterpolator()); } @Override - public void addAnimationCleanup(View view) { - ViewCompat.setTranslationX(view, 0); - ViewCompat.setAlpha(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } @Override @@ -36,14 +36,14 @@ public long getRemoveDelay(long remove, long move, long change) { } @Override - public ViewPropertyAnimatorCompat removeAnimation(View view) { - final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); - return animation.setDuration(getMoveDuration()).alpha(0).translationX(-view.getWidth()); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationX(-holder.itemView.getWidth()).setInterpolator(getInterpolator()); } @Override - public void removeAnimationCleanup(View view) { - ViewCompat.setTranslationX(view, 0); - ViewCompat.setAlpha(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationX(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } } diff --git a/library/src/main/java/com/mikepenz/itemanimators/SlideUpAlphaAnimator.java b/library/src/main/java/com/mikepenz/itemanimators/SlideUpAlphaAnimator.java index fc59859..d7d0b62 100644 --- a/library/src/main/java/com/mikepenz/itemanimators/SlideUpAlphaAnimator.java +++ b/library/src/main/java/com/mikepenz/itemanimators/SlideUpAlphaAnimator.java @@ -2,27 +2,27 @@ import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; -import android.view.View; +import android.support.v7.widget.RecyclerView; /** * Created by mikepenz on 08.01.16. */ public class SlideUpAlphaAnimator extends DefaultAnimator { @Override - public void addAnimationPrepare(View view) { - ViewCompat.setTranslationY(view, view.getHeight()); - ViewCompat.setAlpha(view, 0); + public void addAnimationPrepare(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, holder.itemView.getHeight()); + ViewCompat.setAlpha(holder.itemView, 0); } @Override - public ViewPropertyAnimatorCompat addAnimation(View view) { - return ViewCompat.animate(view).translationY(0).alpha(1).setDuration(getMoveDuration()); + public ViewPropertyAnimatorCompat addAnimation(RecyclerView.ViewHolder holder) { + return ViewCompat.animate(holder.itemView).translationY(0).alpha(1).setDuration(getMoveDuration()).setInterpolator(getInterpolator()); } @Override - public void addAnimationCleanup(View view) { - ViewCompat.setTranslationY(view, 0); - ViewCompat.setAlpha(view, 1); + public void addAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } @Override @@ -36,14 +36,14 @@ public long getRemoveDelay(long remove, long move, long change) { } @Override - public ViewPropertyAnimatorCompat removeAnimation(View view) { - final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); - return animation.setDuration(getMoveDuration()).alpha(0).translationY(view.getHeight()); + public ViewPropertyAnimatorCompat removeAnimation(RecyclerView.ViewHolder holder) { + final ViewPropertyAnimatorCompat animation = ViewCompat.animate(holder.itemView); + return animation.setDuration(getRemoveDuration()).alpha(0).translationY(holder.itemView.getHeight()).setInterpolator(getInterpolator()); } @Override - public void removeAnimationCleanup(View view) { - ViewCompat.setTranslationY(view, 0); - ViewCompat.setAlpha(view, 1); + public void removeAnimationCleanup(RecyclerView.ViewHolder holder) { + ViewCompat.setTranslationY(holder.itemView, 0); + ViewCompat.setAlpha(holder.itemView, 1); } } diff --git a/library/src/main/res/values/library_itemanimators_strings.xml b/library/src/main/res/values/library_itemanimators_strings.xml index 9eb289a..7d55a4a 100755 --- a/library/src/main/res/values/library_itemanimators_strings.xml +++ b/library/src/main/res/values/library_itemanimators_strings.xml @@ -10,7 +10,7 @@ The ItemAnimators library comes with a huge collections of pre-created Animators for your RecyclerView. ]]> - 0.1.0-SNAPSHOT + 0.2.0-SNAPSHOT https://github.com/mikepenz/itemanimators apache_2_0 true