Java tutorial
/* * ****************************************************************************** * Copyright (c) 2014-2015 Gabriele Mariotti. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ***************************************************************************** */ package aloha.shiningstarbase.util.itemanimator; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorCompat; import android.support.v7.widget.RecyclerView; import android.view.View; /** * @author Gabriele Mariotti (gabri.mariotti@gmail.com) */ public class SlideInOutBottomItemAnimator extends BaseItemAnimator { private float mOriginalY; private float mDeltaY; public SlideInOutBottomItemAnimator(RecyclerView recyclerView) { super(recyclerView); } protected void animateRemoveImpl(final RecyclerView.ViewHolder holder) { final View view = holder.itemView; final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); mRemoveAnimations.add(holder); animation.setDuration(getRemoveDuration()).alpha(0).translationY(+mDeltaY) .setListener(new VpaListenerAdapter() { @Override public void onAnimationStart(View view) { dispatchRemoveStarting(holder); } @Override public void onAnimationEnd(View view) { animation.setListener(null); ViewCompat.setAlpha(view, 1); ViewCompat.setTranslationY(view, +mDeltaY); dispatchRemoveFinished(holder); mRemoveAnimations.remove(holder); dispatchFinishedWhenDone(); } }).start(); } @Override protected void prepareAnimateAdd(RecyclerView.ViewHolder holder) { retrieveItemPosition(holder); ViewCompat.setTranslationY(holder.itemView, +mDeltaY); } protected void animateAddImpl(final RecyclerView.ViewHolder holder) { final View view = holder.itemView; final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view); mAddAnimations.add(holder); animation.translationY(0).alpha(1).setDuration(getAddDuration()).setListener(new VpaListenerAdapter() { @Override public void onAnimationStart(View view) { dispatchAddStarting(holder); } @Override public void onAnimationCancel(View view) { ViewCompat.setAlpha(view, 1); ViewCompat.setTranslationY(view, 0); } @Override public void onAnimationEnd(View view) { animation.setListener(null); ViewCompat.setAlpha(view, 1); ViewCompat.setTranslationY(view, 0); dispatchAddFinished(holder); mAddAnimations.remove(holder); dispatchFinishedWhenDone(); } }).start(); } private void retrieveItemPosition(final RecyclerView.ViewHolder holder) { mOriginalY = mRecyclerView.getLayoutManager().getDecoratedTop(holder.itemView); mDeltaY = mRecyclerView.getHeight() - mOriginalY; } }